csv ファイルがあり、最後の列に「ecDNA」という単語が含まれているかどうかに基づいて、それを 2 つのファイルにフィルターする必要があります。元のファイルを変更せずに編集するファイルのコピーがすでに 2 つあります。1 つのファイルから「ecDNA」を含まない行をすべて削除し、ファイルの別のコピーから「ecDNA」を含む行のみを保持する方法はありますか?
答え1
awk -F, '$NF ~ /ecDNA/' oldfile > newfile
NF は現在の入力行のフィールド数 (列数) なので、$NF は最後のフィールドの値 (内容) です。$NF に「ecDNA」が含まれている場合は、その行を出力します。それ以外の場合は無視します。
大文字と小文字を区別せずに一致させる必要がある場合 (GNU awk を使用している場合) は、次を使用します。
awk -F, -v IGNORECASE=1 '$NF ~ /ecDNA/' oldfile > newfile
反転一致(ecDNA
最後のフィールドにない行)の場合は、条件演算子を否定します。
awk -F, '$NF !~ /ecDNA/' oldfile > newfile2