我有一个 400 兆字节的文件。该文件是一个单词列表,每个单词占一行。行尾是 cr/lf 和 lf 的混合。有些单词是 unicode。
我希望得到 Linux 或 Windows 的答案。我很乐意安装软件,但我更喜欢开源软件。
我需要删除所有少于 8 个字符的单词。然后我需要对列表进行去重。(对列表进行排序很好,但除非这是流程的一部分,否则不需要。)我不关心 unicode 单词 - 它们可以保留或删除。删除它们就可以了。
要删除所有长度为 7 个或更少的字符的单词,我使用 awk:
awk "length($0) > 7" wordlist.txt > mynewwordlist.txt
(这是 Windows,抱歉,用“ 代替了 ’)
然后我尝试使用 sort,因为我可以再次使用 awk 来删除重复行。Sort 不喜欢单词表。我认为(但我不确定)unicode 破坏了它。
那么,我该如何对单词表进行去重?或者我该如何对单词表进行排序,以便使用 awk 进行去重?
答案1
要进行重复数据删除,您需要sort -u
- 它只会输出唯一的行。这是 POSIX 指定的选项,因此您可能会在任何系统上找到它。
sort -u wordlist.txt | awk 'length($0) > 7'
如果您使用的是 Windows,请使用双引号awk
。请注意,排序步骤不是可选的,因为uniq
需要相邻的重复行才能将其删除。
如果您遇到 Unicode 问题,这可能是您的语言环境的问题。您可以设置LC_ALL=C
为强制进行本机字节值比较 - 无论如何,实际排序顺序对您来说并不重要。或者,iconv
如果这是问题所在,您可以使用将文件从 Unicode 转换为另一种编码。
答案2
如果有人需要在没有访问权限的情况下执行此操作awk
,您还可以使用grep
来选择至少给定长度的单词:
sort -u wordlist.txt | grep '........'