為什麼comm的輸出無法顯示公共記錄?

為什麼comm的輸出無法顯示公共記錄?

我有兩個文件中的 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

相關內容