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

관련 정보