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

hja*_*mig 6 unix sorting string cygwin uniq

我正在尝试在文本文件上使用以下命令:

$ sort <m.txt | uniq -c | sort -nr >m.dict 
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

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’.
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上使用Cygwin,并且在编辑m.txt时遇到麻烦,将文件中的每个单词放在一个新行上.请参阅:

使用AWK将每个单词放在新行的文本文件中

我不确定我是否因此而收到这些错误,或者因为m.txt包含来自威尔士语字母的字符(当我在Python中使用威尔士文本时,我需要将编码更改为'Latin-1 ").

我尝试按照错误消息的建议并更改LC_ALL ='C'然而这没有帮助.任何人都可以详细说明我收到的错误,并提供有关如何尝试解决此问题的任何建议.

更新:

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

小智 8

我知道这是一个老问题,但只需运行该命令即可export LC_ALL='C'完成sort: Set LC_ALL='C' to work around the problem..


Jen*_*ens 3

看起来像 Windows 行结束相关问题(\r\n\n)。您可以m.txt使用以下命令转换为 Unix 行结尾

dos2unix m.txt
Run Code Online (Sandbox Code Playgroud)

然后重新运行您的命令。