比较linux中两个未排序的列表,在第二个文件中列出唯一的

比较linux中两个未排序的列表,在第二个文件中列出唯一的,linux,bash,shell,comparison,grep,Linux,Bash,Shell,Comparison,Grep,我有两个文件和一个号码列表(电话号码) 我正在寻找在第二个文件中列出第一个文件中不存在的数字的方法 我尝试了以下各种方法: comm (getting some weird sorting errors) fgrep -v -x -f second-file.txt first-file.txt (unsure of the result, there should be more) 您需要使用comm: comm -13 first.txt second.txt 我会做好的 ps.命令行中

我有两个文件和一个号码列表(电话号码)

我正在寻找在第二个文件中列出第一个文件中不存在的数字的方法

我尝试了以下各种方法:

comm (getting some weird sorting errors)
fgrep -v -x -f second-file.txt first-file.txt (unsure of the result, there should be more)

您需要使用
comm

comm -13 first.txt second.txt
我会做好的

ps.命令行中第一个和第二个文件的顺序

此外,您可能需要在执行以下操作之前对文件进行排序:

comm -13 <(sort first.txt) <(sort second.txt)
comm-13
基本上查找
second file.txt
中与
first file.txt
中的任何行都不匹配的所有行。如果文件较大,则速度可能较慢

此外,一旦您对文件进行了排序(如果它们是数字,请使用
sort-n
),那么
comm
也应该可以工作。它给出了什么错误?试试这个:

comm -23 second-file-sorted.txt first-file-sorted.txt
这应该行得通

comm -13 <(sort file1) <(sort file2)
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
#错误

$comm您是否已检查此答案:?顺便说一句:在做任何事情之前,确保你已经删除了所有的尾随行和额外的空格。这可能是您没有找到所有文件的原因…这导致:comm:file 2未按排序顺序comm:file 1未按排序顺序排列,并且列表的行数与file 2完全相同,因此您可以尝试在之前对其进行排序。我刚刚添加了带有
comm
+
sort
的变体。请记住,对文件进行数字排序可能不起作用,因为comm希望它们按字典顺序进行排序。似乎做到了这一点,只需几秒钟,两个文件中大约有500000行组合在一起。很酷,在现代机器上500k应该可以。但我没想到它会这么快。。!comm这个东西有用吗?警告,不能将sort-n与comm一起使用,请参阅我的测试grep解决方案仅在
second file.txt
不是空的情况下有效。-23标志意味着什么?不幸的是,这提供了两个文件中所有行的唯一列表,请求者只从文件2中查找不同的行。
1
3
21
50
#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