番号(電話番号)のリストを含む2つのファイルがあります。
最初のファイルにない番号を 2 番目のファイルにリストする方法を探しています。
私はさまざまな方法を試しました:
comm (getting some weird sorting errors)
fgrep -v -x -f second-file.txt first-file.txt (unsure of the result, there should be more)
番号(電話番号)のリストを含む2つのファイルがあります。
最初のファイルにない番号を 2 番目のファイルにリストする方法を探しています。
私はさまざまな方法を試しました:
comm (getting some weird sorting errors)
fgrep -v -x -f second-file.txt first-file.txt (unsure of the result, there should be more)
grep -Fxv -f first-file.txt second-file.txt
基本的に、second-file.txt
のどの行とも一致しないすべての行を探しfirst-file.txt
ます。ファイルが大きい場合は遅くなる可能性があります。
また、ファイルを並べ替えると(sort -n
数値の場合に使用)、その後comm
も機能するはずです。どのようなエラーが発生しますか? これを試して:
comm -23 second-file-sorted.txt first-file-sorted.txt
使用する必要がありますcomm
:
comm -13 first.txt second.txt
仕事をします。
ps。コマンドラインの最初と2番目のファイルの順序が重要です。
また、次の前にファイルをソートする必要がある場合があります。
comm -13 <(sort first.txt) <(sort second.txt)
ファイルが数値の場合は、 に-n
オプションを追加しますsort
。
これはうまくいくはずです
comm -13 <(sort file1) <(sort file2)
sort -n (数値) は、内部で sort (英数字) を使用する comm では機能しないようです。
f1.txt
1
2
21
50
f2.txt
1
3
21
50
21 は 3 列目に表示されます
#WRONG
$ comm <(sort -n f1.txt) <(sort -n f2.txt)
1
2
21
3
21
50
#OK
$ comm <(sort f1.txt) <(sort f2.txt)
1
2
21
3
50
cat f1.txt f2.txt | sort |uniq > file3