2 つの大きなファイル (ファイル名のセット) があります。各ファイルには約 30,000 行あります。ファイル 2 に存在しないファイル 1 の行をすばやく見つける方法を探しています。
たとえば、これがfile1 の場合:
line1
line2
line3
そしてこれがファイル2です:
line1
line4
line5
結果/出力は次のようになります。
line2
line3
これは機能します:
grep -v -f file2 file1
しかし、大きなファイルで使用すると非常に遅くなります。
を使用してこれを行う良い方法があると思いますdiff
が、出力は行のみで、他には何も表示されず、そのためのスイッチが見つからないようです。
bash と基本的な Linux バイナリを使用して、これをすばやく実行する方法を見つけるのを手伝ってくれる人はいませんか?
編集: 自分の質問に追記すると、これは私がこれまでに見つけた最善の方法ですdiff
:
diff file2 file1 | grep '^>' | sed 's/^>\ //'
きっともっと良い方法があるはずですよね?
ベストアンサー1
の通信コマンド(「common」の略)が役に立つかもしれないcomm - compare two sorted files line by line
#find lines only in file1
comm -23 file1 file2
#find lines only in file2
comm -13 file1 file2
#find lines common to both files
comm -12 file1 file2
このman
ファイルは実際にはかなり読み取りやすいです。