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

관련 정보