我如何才能对一长串单词进行排序和去重?

我如何才能对一长串单词进行排序和去重?

我有一个 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 '........'

相关内容