我有两个文件中的 ID 列表(已排序),我运行了 comm 命令来比较它们,但它似乎遗漏了两个文件共有的一行。这是为什么?
文件1:
1
2
3
4
5
6
7
8
9
11
12
13
15
16
17
18
19
20
21
22
文件2:
16
18
21
23
705
707
709
711
712
826
827
839
846
847
848
872
873
874
875
891
通讯输出:$> comm file1 file1
1
16 //exists in both files
18 //exists in both files
2
21
23
3
4
5
6
7
705
707
709
711
712
8
826
827
839
846
847
848
872
873
874
875
891
9
11
12
13
15
16 //it's here!
17
18 //...and here!
19
20
21
22
文件均已排序。但是,我的猜测是,comm
不进行数字比较,只按字典顺序查看条目?如果是这样,我可以尝试哪些替代方案?
答案1
comm
应该告诉您其中一个文件未排序:
comm: file 1 is not in sorted order
LC_COLLATE
它期望使用当前区域设置的排序规则(由 确定)对文件进行排序;它不接受数字顺序。
要比较文件,您可以对它们进行预排序(如您指出的按字典顺序排列):
comm <(sort file1) <(sort file2)
如果您希望结果按数字排序,请再次排序:
comm <(sort file1) <(sort file2) | sort -n
这会产生
1
2
3
4
5
6
7
8
9
11
12
13
15
16
17
18
19
20
21
22
23
705
707
709
711
712
826
827
839
846
847
848
872
873
874
875
891