我有 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 个带有数字列表(电话号码)的文件。
我正在寻找一种方法来列出第二个文件中不存在于第一个文件中的数字。
我尝试了各种方法:
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
将完成这项工作。
附言。命令行中第一个和第二个文件的顺序很重要。
您也可能需要在之前对文件进行排序:
comm -13 <(sort first.txt) <(sort second.txt)
如果文件是数字添加-n
选项sort
。
这应该工作
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
cat f1.txt f2.txt | sort |uniq > file3