最後の列に特定の単語が含まれる行を別のファイルにコンパイルするにはどうすればよいでしょうか?

最後の列に特定の単語が含まれる行を別のファイルにコンパイルするにはどうすればよいでしょうか?

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

関連情報