以下のようにパイプで区切られたファイルがあります。
データ.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