sort:字符串比较失败多字节或宽字符无效或不完整

时间:2016-03-29 18:29:31

标签: string sorting unix cygwin uniq

我试图在文本文件中使用以下命令:

$ 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中使用威尔士语时,我需要更改编码为&#39; Latin-1&#39;)。

我尝试按照错误消息的建议并更改LC_ALL =&#39; C&#39;但这没有帮助。任何人都可以详细说明我收到的错误,并就如何解决这个问题提出任何建议。

更新:

尝试使用dos2unix时,会在某些行显示有关无效字符的错误。事实证明这些不是威尔士人物,而是其他奇怪的人物(箭头等)。我查看了删除这些字符的文本文件,直到我能够无错误地使用dos2unix命令。但是,在使用dos2unix命令后,所有文本都连接在一起(没有空格/换行符或任何内容,而应该是这样,文件中的每个单词都在单独的行上)然后我使用unix2dos并且文本文件恢复正常。如何在每个单词的各个单词上使用sort命令,而不会给出错误的&#39; \ r&#39;字符?

2 个答案:

答案 0 :(得分:1)

看起来像Windows行结尾相关问题(\nm.txt)。您可以使用

dos2unix m.txt 转换为Unix行结尾
{{1}}

然后重新运行命令。

答案 1 :(得分:1)

我知道这是一个老问题,但只是运行命令export LC_ALL='C'就可以实现sort: Set LC_ALL='C' to work around the problem.所描述的技巧。