我经常进行文本操作,我经常使用的操作之一是排序 - 通常也会删除任何重复项。
所以我通常使用命令sort
或者sort -u
从命令行或在脚本、宏等中使用命令 - 如果我不工作自由办公室 作家或者计算,当然(不幸的是,在排序时没有删除重复项的选项,或者我不知道;-)
现在我有一个纯文本文件,其中包含大量符号、表情符号、形状、线条、非标准 ASCII 字母和数字等,并且有许多重复项。
将它们转换为每行一个字符的文本很容易。
然而,排序和删除重复项显然并不像人们想象的那么简单:
不幸的是,使用该命令sort -u file.txt > file-sorted.txt
将 2078 行减少到仅 359 行,我猜删除了大约一千个唯一字符 - 我可以看到有很多字符被错误地过滤掉。
所以我的结论sort -u command
是仅适用于标准字母数字字符。
有什么想法和建议吗?
附:以下是我尝试处理的文件中的 40 个字符的示例文本:
ღ ❂ ◕ ⊕ Θ o O ♋ ☯ ⊙ ◎ ๑ ☜ ☞ ♨ ☎ ☏ ۩ ۞ ♬ ✖ ɔ ½ ' ‿ ' * ᴗ * ◕ ‿ ◕ ❊ ᴗ ❊ . ᴗ . ᵒ ᴗ
这里只有几个重复项,但尽管sort
命令处理文本时遇到了一些问题,但没有任何损失,两者都sort -u
具有uniq
完全相同的输出,将其减少到 11 个,并删除了许多字符。
答案1
尝试使用具有适当 Unicode 支持的东西,例如 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