2 つのファイルに ID リスト (ソート済み) があり、それらを比較するために comm コマンドを実行しましたが、両方のファイルに共通する 1 行が欠落しているようです。なぜでしょうか。
ファイル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
ファイルの 1 つがソートされていないことがわかります。
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