44

番号(電話番号)のリストを含む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)
4

4 に答える 4

83
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
于 2012-06-19T11:31:46.523 に答える
29

使用する必要がありますcomm

comm -13 first.txt second.txt

仕事をします。

ps。コマンドラインの最初と2番目のファイルの順序が重要です。

また、次の前にファイルをソートする必要がある場合があります。

comm -13 <(sort first.txt) <(sort second.txt)

ファイルが数値の場合は、 に-nオプションを追加しますsort

于 2012-06-19T11:26:20.067 に答える
12

これはうまくいくはずです

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
于 2012-06-19T12:40:54.043 に答える
1
cat f1.txt f2.txt | sort |uniq > file3
于 2014-07-30T14:52:44.143 に答える