最後の列に「ecDNA」という単語が含まれているかどうかに応じて、2つのファイルでフィルタリングする必要があるcsvファイルがあります。元のファイルを変更せずに編集できるファイルのコピーはすでに2つあります。あるファイルから「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