통신 명령이 비정상적으로 동작합니다.

통신 명령이 비정상적으로 동작합니다.

두 개의 파일이 있습니다.

  1. find파일을 나열하고, 숫자로 정렬하고, 파일에 쓰기 위해 폴더의 명령을 사용하여 생성된 파일입니다 .
  2. 다른 하나는 Python 스크립트에 의해 생성되었으며 정렬되지 않았으므로 명시적으로 숫자로 정렬했습니다.

문제는 내 sort출력에 다음과 같은 두 개의 열만 있다는 것입니다.

500016
    500016
500174
    500174
500277
    500277

보시다시피 공통 항목도 두 열에 단독으로 표시되고 세 번째 열은 완전히 누락되었습니다. 즉, 두 파일 간에 공통점이 없지만 처음 세 항목은 실제로 동일합니다.sort 그렇지 않으면 예상대로 작동합니다.그리고 제가 만든 테스트 파일도 있습니다.

나는 comm두 파일을 모두 사전순으로 정렬해야 한다는 것을 알고 있습니다. 다음은 제가 시도했지만 실패한 옵션 목록입니다.

comm <(sort file1.txt) <(sort file2.txt)

~에서https://unix.stackexchange.com/a/377689/187419실패. 또한 명시적으로 -d옵션을 제공하려고 시도했으며 sort사전 정렬을 사용하여 파일을 명시적으로 다시 작성해 보았지만 둘 다 작동하지 않았습니다.

comm --check-order <(sort file1.txt) <(sort file2.txt)

~에서https://unix.stackexchange.com/a/186101/187419주문 오류는 반환되지 않습니다. 평소대로 실행되어 두 개의 출력 열이 제공됩니다.

이 솔루션나와 매우 가까운 문제에도 적용되지 않습니다.

파일에 일부 추가 문자가 있기 때문일 수도 있다고 생각하고 해결책도 언급했습니다.여기:set listvim에서 하세요.

문제가 발생 하는지 테스트하기 위해 sort제가 만든 테스트 파일(이전에 사용했던 파일)을 구체적으로 comm숫자별로 정렬했는데 comm여전히 작동했습니다.

찾을 수 있는 모든 솔루션을 시도했지만 성공하지 못했습니다. 다른 제안이 있나요?

답변1

당신 말이 거의 맞습니다. 각 줄에 추가 문자가 있으면 해당 줄이 정확히 일치하지 않게 됩니다. 이러한 추가 문자는 캐리지 리턴, 공백 또는 Windows 스타일 줄 종결자의 탭 형태이거나 기타 인쇄되지 않는 문자일 수 있습니다. 예를 들어, Python 스크립트는 숫자 중 일부 또는 전체에 선행 공백이 있도록 숫자를 오른쪽 정렬할 수 있습니다.

가장 신뢰할 수 있는 방법은 원치 않는 문자를 모두 필터링하는 것입니다. 데이터는 엄격하게 숫자이므로 다음과 같이 쉽게 수행할 수 있습니다 sed.

sed 's/[^0-9]//g' < input > output

프로세스의 다양한 지점에 삽입할 수 있습니다. 이것은 그 중 하나일 뿐입니다:

comm <(sed 's/[^0-9]//g' file1.txt | sort) <(sed 's/[^0-9]//g' file2.txt | sort)

관련 정보