정렬하는 가장 좋은 방법은 무엇입니까?

정렬하는 가장 좋은 방법은 무엇입니까?

나는 많은 텍스트 조작을 수행하며 내가 많이 사용하는 작업 중 하나는 정렬입니다. 일반적으로 중복된 항목도 제거합니다.

그래서 저는 보통 명령줄 sort이나 sort -u스크립트, 매크로 등에서 명령을 사용합니다. - 작동하지 않는 경우무료 사무실 작가또는계산하다, 물론입니다(불행히도 정렬할 때 중복 항목을 제거할 수 있는 옵션이 없거나 모르겠습니다 ;-)

이제 많은 중복 항목과 함께 많은 기호, 이모티콘, 도형, 선, 비표준 ASCII 문자 및 숫자 등이 포함된 일반 텍스트 파일이 생겼습니다.

한 줄에 한 문자씩 텍스트로 변환하는 것은 쉽습니다.

그러나 중복 항목을 정렬하고 제거하는 것은 생각만큼 간단하지 않습니다.

불행하게도 이 명령을 사용하면 sort -u file.txt > file-sorted.txt2078줄이 359줄로 줄어들었고, 이로 인해 약 1000개의 고유 문자가 제거된 것 같습니다. 많은 문자가 잘못 필터링되는 것을 볼 수 있습니다.

그래서 내 결론 sort -u command표준 영숫자 문자로만 작동합니다..

어떤 생각이나 제안이 있으십니까?

첨부된:처리하려는 파일의 샘플 텍스트 40자는 다음과 같습니다.

ღ ❂ ◕ ⊕ Θ o O ♋ ☯ ⊙ ◎ ๑ ☜ ☞ ♨ ☎ ☏ ۩ ۞ ♬ ✖ ɔ ½ ' ‿ ' * ᴗ * ◕ ‿ ◕ ❊ ᴗ ❊ . ᴗ . ᵒ ᴗ 

여기에는 몇 개의 중복 항목만 있지만 sort명령이 텍스트를 처리하는 데 약간의 문제가 있지만 아무것도 손실되지 않으며 둘 다 정확히 동일한 출력을 sort -u가지므로 uniq11개로 줄어들고 많은 문자가 제거됩니다.

답변1

Python과 같이 적절한 유니코드를 지원하는 것을 사용해 보세요.

$ python3 -c 'import sys; print("\n".join(sorted(set(c for l in sys.stdin.readlines() for c in l.split()))))' < bar
'
*
.
O
o
½
ɔ
Θ
۞
۩
$ python3 -c 'import sys; print(len(set(c for l in sys.stdin.readlines() for c in l.split())))' < bar
30

관련 정보