【发布时间】:2016-03-29 18:29:30
【问题描述】:
我正在尝试对文本文件使用以下命令:
$ sort <m.txt | uniq -c | sort -nr >m.dict
但是我收到以下错误消息:
sort: string comparison failed: Invalid or incomplete multibyte or wide character
sort: Set LC_ALL='C' to work around the problem.
sort: The strings compared were ‘enwedig\r’ and ‘mwy\r’.
我在 Windows 7 上使用 Cygwin,之前在编辑 m.txt 以将文件中的每个单词换行时遇到了问题。请看:
Using AWK to place each word in a text file on a new line
我不确定我是否因此而收到这些错误,或者因为 m.txt 包含威尔士字母表中的字符(当我在 Python 中处理威尔士语文本时,我需要将编码更改为 '拉丁语-1')。
我尝试按照错误消息的建议更改 LC_ALL='C' 但这并没有帮助。谁能详细说明我收到的错误,并就我如何尝试解决这个问题提供任何建议。
更新:
在尝试 dos2unix 时,会在某些行显示有关无效字符的错误。原来这些不是威尔士字符,而是其他奇怪的字符(箭头等)。我浏览了删除这些字符的文本文件,直到能够正确使用 dos2unix 命令。但是,在使用 dos2unix 命令后,所有文本都被连接(没有空格/换行符或任何东西,而文件中的每个单词都应该是单独的行)然后我使用了 unix2dos 并且文本文件恢复正常.如何将每个单词放在单独的行中并使用 sort 命令而不会给我关于 '\r' 字符的错误?
【问题讨论】:
-
dos2unix不会排长队;只有 Windows 工具不理解 Unix 行尾。不要使用 Windows 编辑器查看 Unix 文件,使用 Unix 编辑器,例如vi,您会在一行中看到每个单词。并确保您使用的是 cygwin 排序程序,而不是 Windows 排序程序。使用/usr/bin/sort确定。 -
啊,我明白了。我的问题还没有完全解决,但我认为现在它与原来的问题相差太远了,所以我创建了另一个问题。我现在将关闭此问题,感谢您的帮助。
标签: string sorting unix cygwin uniq