44

我有 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

将完成这项工作。

附言。命令行中第一个和第二个文件的顺序很重要。

您也可能需要在之前对文件进行排序:

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 (numeric) 不能与 comm 一起使用,它在内部使用 sort (alphanumeric)

f1.txt

1
2
21
50

f2.txt

1
3
21
50

21 应该出现在第三列

#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 回答