통신: 파일이 정렬된 순서가 아님

통신: 파일이 정렬된 순서가 아님

한번은 comm두 개의 정렬된 파일을 비교한 적이 있습니다. 이 파일의 각 줄은 양의 정수입니다. 하지만 결과는 보여

comm: file 1 is not in sorted order
comm: file 2 is not in sorted order

두 파일이 모두 정렬되었는데도 오류가 발생하는 이유는 무엇입니까?

답변1

commsort숫자 정렬( )이 아닌 사전 정렬(일반 )이 필요합니다 sort -n. 예를 들어 다음 순서가 필요합니다.

1
2000
300

다음 순서가 아닙니다.

1
300
2000

이를 수정하면 문제가 해결됩니다. comm의 로케일이 locale 과 다를 수 있는 더 난해한 경우에는 해당 환경 내에서 실행 하고 기본 바이트 순서를 사용해야 할 sort수도 있습니다 .sortcommLC_COLLATE=C

답변2

정렬된 파일을 질문에 붙여넣거나 파일 정렬 방법에 대한 통찰력을 얻는 것이 도움이 될 것입니다. 대부분의 경우 @ChrisDown의 답변이 작동합니다. 내 대답은 초보자가 때때로 직면할 수 있는 문제를 해결합니다.

sort file1.txt원본 파일을 변경하지 않고 정렬된 출력을 인쇄합니다. 따라서 정렬을 사용할 때에는 파일이 실제로 정렬되었는지 확인하는 것이 중요합니다.

이는 아래 표시된 출력에서 ​​분명해집니다.

┌──(user㉿user)-[~/Desktop/abc]
└─$ sort no1.txt                  
26
67
789
98
                                                                                
┌──(user㉿user)-[~/Desktop/abc]
└─$ cat no1.txt
789
67
98
26

이 정렬을 통해 파일의 정렬된 내용이 제공되지만, 파일 내용을 보면 원본 파일 자체가 표시됩니다. (원본 txt 파일은 이 답변의 끝을 참조하세요.)

정렬된 파일을 comm에 전달하는 한 가지 방법은 다음과 같습니다.

  • 각 파일은 정렬되고 cat으로 파이프되어 정렬된 내용으로 새 파일을 생성합니다.
  • 새 파일을 comm에 전달합니다.
┌──(user㉿user)-[~/Desktop/abc]
└─$ cat int1.txt
26
67
789
98
                                                                                
┌──(user㉿user)-[~/Desktop/abc]
└─$ sort no2.txt | cat > int2.txt
                                                                                
┌──(user㉿user)-[~/Desktop/abc]
└─$ comm int1.txt int2.txt
26
    45
        67
        789
    88
98

텍스트 파일:

  • no1.txt
    789
    67
    98
    26
    
  • no2.txt
    789
    67
    45
    88
    

관련 정보