比较Linux中两个未排序的列表,在第二个文件中列出unique

5n0oy7gb  于 2023-10-16  发布在  Linux
关注(0)|答案(5)|浏览(94)

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

x3naxklr1#

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
js81xvg6

js81xvg62#

使用comm

comm -13 first.txt second.txt

就能完成任务
ps.命令行中第一个和第二个文件的顺序问题。
你也可能需要排序文件之前:

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

如果文件是数字,请将-n选项添加到sort

kx5bkwkv

kx5bkwkv3#

这应该工作

comm -13 <(sort file1) <(sort file2)

似乎sort -n(数字)不能与sort(字母数字)一起使用,sort在内部使用
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
fhg3lkii

fhg3lkii4#

cat f1.txt f2.txt | sort |uniq > file3
iyr7buue

iyr7buue5#

如果你有两个已排序的文件,diff就是为此而设计的:

diff -y --suppress-common-lines --color=always sorted_list1.txt sorted_list2.txt | less

相关问题