bash で別のファイルからアイテムのリストを削除する

bash で別のファイルからアイテムのリストを削除する

あるファイルにリストされている項目を別のファイルから(順序なし)削除する最も効率的な方法(コマンドを繰り返し実行しない)は何でしょうか?

2番目のファイル内の一致しない項目のリストは、次のように簡単に取得できます。

cat first_file.txt second_file.txt | sort | uniq -u

しかし、これには最初のファイルの一致しない項目もすべて含まれてしまいます... 次は何をするのでしょうか?

答え1

このawkプログラムは各ファイルを 1 回ずつ処理します。

awk '
    NR == FNR {f1[$0] = 1; next}
    !($0 in f1)
' file1 file2

comm この作業には便利です。入力ファイルをソートする必要があります。

# output lines unique to file2
comm -13 <(sort file1) <(sort file2)

関連情報