나는 많은 텍스트 조작을 수행하며 내가 많이 사용하는 작업 중 하나는 정렬입니다. 일반적으로 중복된 항목도 제거합니다.
그래서 저는 보통 명령줄 sort
이나 sort -u
스크립트, 매크로 등에서 명령을 사용합니다. - 작동하지 않는 경우무료 사무실 작가또는계산하다, 물론입니다(불행히도 정렬할 때 중복 항목을 제거할 수 있는 옵션이 없거나 모르겠습니다 ;-)
이제 많은 중복 항목과 함께 많은 기호, 이모티콘, 도형, 선, 비표준 ASCII 문자 및 숫자 등이 포함된 일반 텍스트 파일이 생겼습니다.
한 줄에 한 문자씩 텍스트로 변환하는 것은 쉽습니다.
그러나 중복 항목을 정렬하고 제거하는 것은 생각만큼 간단하지 않습니다.
불행하게도 이 명령을 사용하면 sort -u file.txt > file-sorted.txt
2078줄이 359줄로 줄어들었고, 이로 인해 약 1000개의 고유 문자가 제거된 것 같습니다. 많은 문자가 잘못 필터링되는 것을 볼 수 있습니다.
그래서 내 결론 sort -u command
은표준 영숫자 문자로만 작동합니다..
어떤 생각이나 제안이 있으십니까?
첨부된:처리하려는 파일의 샘플 텍스트 40자는 다음과 같습니다.
ღ ❂ ◕ ⊕ Θ o O ♋ ☯ ⊙ ◎ ๑ ☜ ☞ ♨ ☎ ☏ ۩ ۞ ♬ ✖ ɔ ½ ' ‿ ' * ᴗ * ◕ ‿ ◕ ❊ ᴗ ❊ . ᴗ . ᵒ ᴗ
여기에는 몇 개의 중복 항목만 있지만 sort
명령이 텍스트를 처리하는 데 약간의 문제가 있지만 아무것도 손실되지 않으며 둘 다 정확히 동일한 출력을 sort -u
가지므로 uniq
11개로 줄어들고 많은 문자가 제거됩니다.
답변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