한번은 comm
두 개의 정렬된 파일을 비교한 적이 있습니다. 이 파일의 각 줄은 양의 정수입니다. 하지만 결과는 보여
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
두 파일이 모두 정렬되었는데도 오류가 발생하는 이유는 무엇입니까?
답변1
comm
sort
숫자 정렬( )이 아닌 사전 정렬(일반 )이 필요합니다 sort -n
. 예를 들어 다음 순서가 필요합니다.
1
2000
300
다음 순서가 아닙니다.
1
300
2000
이를 수정하면 문제가 해결됩니다. comm
의 로케일이 locale 과 다를 수 있는 더 난해한 경우에는 해당 환경 내에서 실행 하고 기본 바이트 순서를 사용해야 할 sort
수도 있습니다 .sort
comm
LC_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