첨부된 사진에서 보시다시피 스크린샷
매우 큰 단어 목록 파일을 sort 명령을 사용하여 정렬한 후 Split 명령을 사용하여 분할했습니다. 거기에서 나열된 단어가 az 순서로 정렬되어 있음을 확인했습니다.
그런 다음 명령을 실행했는데 sort -u
고유 단어가 제거되지 않은 것을 확인했습니다. (파일이 좀 작아서 일부를 삭제했지만 전부는 아니었습니다.)
내가 뭘 잘못했나요?
전반적인 목표: 나의 전반적인 목표는 모든 단어 목록을 가져와 이를 큰 파일(25gig)에 넣은 다음 고유한 단어를 정렬 및 제거하고(약 40% 줄임) 파일을 관리 가능한 크기로 분할하는 것입니다. Windows 프로그램이나 Linux 명령이 작동하지 않습니다.
답변1
sort -u 고유 삭제철사. 따라서 잠재적인 문제는 이 세 줄이 동일하지 않아 sort -u
모두 남게 된다는 것입니다.
foo
foo
foo
아무리 자세히 살펴봐도 이유를 알아차리기 어렵습니다. 즉, 다음 xxd
과 같은 16진수 덤프를 수행하지 않는 한:
0000000: 666f 6f0a 666f 6f20 0a66 6f6f e280 820a foo.foo .foo....
0x0a
16진수 덤프에 익숙하지 않은 경우 개행 문자입니다. 따라서 세 가지 "foo"는 다음과 같습니다.
666f 6f 0a
666f 6f20 0a
666f 6fe2 8082 0a
아하! 이는 실제로 foo
, foo<SPACE>
( 0x20
) 및 foo<EN-SPACE>
( 0xe28082
, UTF-8로 인코딩된 U+2002)입니다.
비슷한 일을 겪었을 수도 있습니다. 보이지 않는 문자를 표시하려면 16진수 편집기나 텍스트 편집기 세트를 사용해야 합니다. 예를 들어, 에 gvim
포함된 내용은 다음과 같습니다 :set list
. 방금 커서 아래에 어떤 문자가 있는지 확인하기 위해 명령을 입력했는데 ga
U+2002로 표시됩니다. 또한 줄 끝( $
)이 예상한 위치에 있지 않고 두 줄 뒤에 공백이 있는 것을 볼 수 있습니다.