正如你在附图中看到的 截屏
在我使用 sort 命令对非常大的单词列表文件进行排序后,我使用 Split 命令将它们拆分。从那里我确认列出的单词是按 az 顺序排列的。
然后我运行该sort -u
命令并注意到它没有删除唯一的单词。 (它删除了一些,因为我可以看到文件有点小,但不是全部。)
我究竟做错了什么?
总体目标:我的总体目标是获取所有单词列表并将它们放入一个大文件(25gig)中,然后排序并删除任何唯一单词(将其削减 40% 左右),然后将文件拆分为可管理的大小。 Windows 程序或 Linux 命令均不起作用。
答案1
sort -u 删除唯一的线。因此,一个潜在的问题是这三行不一样,并且sort -u
会留下所有这些:
foo
foo
foo
无论你看得多么仔细,都很难注意到原因。也就是说,除非您进行十六进制转储,xxd
例如:
0000000: 666f 6f0a 666f 6f20 0a66 6f6f e280 820a foo.foo .foo....
0x0a
是换行符,如果您不熟悉十六进制转储。所以三个“foo”是:
666f 6f 0a
666f 6f20 0a
666f 6fe2 8082 0a
啊哈!这实际上是foo
、foo<SPACE>
( 0x20
) 和foo<EN-SPACE>
( 0xe28082
,以 UTF-8 进行 U+2002 编码)。
你可能也遇到过类似的事情。您需要使用十六进制编辑器或文本编辑器集来显示不可见字符。例如,以下是gvim
with中的内容:set list
。我刚刚输入命令ga
来查看光标下的字符是什么,显示它是 U+2002。您还可以看到行尾 ( $
) 与您期望的位置不同,两行后面有空格: