入力ファイルを介してテキストファイルの列から特定の値を持つ行を削除する方法は?

入力ファイルを介してテキストファイルの列から特定の値を持つ行を削除する方法は?

以下のようにパイプで区切られたファイルがあります。

データ.txt

ESP|041336|46566|NY|CA
ESP|041337|46566|NY|CA
ESP|041338|46566|NY|CA
ESP|041339|46566|NY|CA
ESP|041340|46566|NY|CA
ESP|041341|46566|NY|CA

2番目の列の値を削除する必要がある別のファイルがあります。

入力.txt

041337
041338
041339

2番目の列にinput.txt値を持つ行を削除しようとしています。

期待される出力

ESP|041336|46566|NY|CA
ESP|041340|46566|NY|CA
ESP|041341|46566|NY|CA

私は以下のようにこれを達成するためにgrepを使用しようとしました。

grep -vfw input.txt data.txt > output.txt

これにより、列は削除されませんが、「該当するファイルまたはディレクトリがありません」というエラーが発生し、空のファイルが返されます。

ベストアンサー1

比較を2番目の区切りフィールドに限定するには、grepの代わりにawkを使用できます。

$ awk -F'|' 'NR==FNR {a[$1]++; next} !($2 in a)' input.txt data.txt > output.txt

$ cat output.txt
ESP|041336|46566|NY|CA
ESP|041340|46566|NY|CA
ESP|041341|46566|NY|CA

おすすめ記事