정렬 | uniq는 다른 파일을 처리할 수 없습니다.

정렬 | uniq는 다른 파일을 처리할 수 없습니다.

이 명령이 왜 나오는지 모르겠습니다.

sort filename.txt | uniq

이 파일을 처리할 수 없습니다:http://packetstormsecurity.com/files/32089/koran.gz.html

나는 또한 다음을 사용했습니다.

awk '!seen[$0]++' koran.txt

perl -ne 'print unless $dup{$_}++;' koran.txt

그리고 이 특정 파일을 작업하는 사람은 아무도 없는 것 같습니다. 이유를 아시나요?

답변1

don_crissti그의 의견에는 주요 문제가 강조되어 있습니다. 그는 다음 명령을 실행하여 파일 형식을 결정합니다.

file koran  

...산출:

ASCII C++ program text, with CRLF, LF line terminators

끝에 있는 CR(캐리지 리턴 - 16진수 값) 문자를 제거해야 합니다.\x0D일부입력 파일의 행. 이는 CRMicrosoft Windows 스타일 줄 끝(CRLF)의 첫 번째 문자입니다. 두 번째(MS) 문자는 LF(개행)입니다. Single은 LFUnix 스타일 줄 종결자에 유효한 단일 문자입니다. CR파일에서 원하지 않는 문자를 제거하는 한 가지 방법 은 다음과 같습니다 .

sed 's/\x0D$//' koran | sort -u

sort"동등한 실행 중 첫 번째만 출력" 옵션이 있으므로 -u실제로 파이프할 필요가 없습니다.uniq


CR아니면 이것이 유일한 것이라고 확신한다면인쇄되지 않음파일에 문자가 있으면 문자 정렬 -i옵션을 사용하면 됩니다 ignore nonprinting.CR

sort -iu koran

업데이트: 다음 사용자의 의견을
기반으로 합니다 .@Francesco Mantovani일부이전에 언급되지 않은 다른 파일의 입력 줄에도 CR 앞에 공백이 있습니다. 이는 다음을 통해 쉽게 처리할 수 있습니다 sed.

sed 's/[[:space:]]\+$//' male.txt female.txt | sort -u

sed -n l그런데, "list current line" man sed명령 에 따라 출력을 파이핑하여 차이점을 발견했습니다.l시각적으로 명확함형태".

관련 정보