あるファイルにあるが別のファイルにはない行を素早く見つける方法は? 質問する

あるファイルにあるが別のファイルにはない行を素早く見つける方法は? 質問する

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ファイルは実際にはかなり読み取りやすいです。

おすすめ記事