Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 排序:字符串比较失败无效或不完整的多字节或宽字符_String_Sorting_Unix_Cygwin_Uniq - Fatal编程技术网

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

String 排序:字符串比较失败无效或不完整的多字节或宽字符,string,sorting,unix,cygwin,uniq,String,Sorting,Unix,Cygwin,Uniq,我正在尝试对文本文件使用以下命令: $ sort <m.txt | uniq -c | sort -nr >m.dict 我在Windows7上使用Cygwin,之前编辑m.txt时遇到问题,无法将文件中的每个单词放在新行上。请参阅: 我不确定是因为这个原因还是因为m.txt包含威尔士字母表中的字符(当我在Python中处理威尔士文本时,我被要求不要将编码更改为“Latin-1”) 我尝试按照错误消息的建议更改LC_ALL='C',但这没有帮助。有人能详细说明我收到的错误,并就

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

$ sort <m.txt | uniq -c | sort -nr >m.dict 
我在Windows7上使用Cygwin,之前编辑m.txt时遇到问题,无法将文件中的每个单词放在新行上。请参阅:

我不确定是因为这个原因还是因为m.txt包含威尔士字母表中的字符(当我在Python中处理威尔士文本时,我被要求不要将编码更改为“Latin-1”)

我尝试按照错误消息的建议更改LC_ALL='C',但这没有帮助。有人能详细说明我收到的错误,并就我如何着手解决这个问题提供建议吗

更新:


尝试dos2unix时,在某些行显示有关无效字符的错误。原来这些不是威尔士人,而是其他奇怪的人物(箭头等)。我通过文本文件删除了这些字符,直到能够正确地使用dos2unix命令。但是,在使用dos2unix命令之后,所有文本都被连接起来(没有空格/换行符或任何东西,而文件中的每个单词都应该在单独的行上),然后我使用unix2dos,文本文件恢复正常。如何在每个单词各自的行上使用sort命令,而不给我有关'\r'字符的错误?

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

dos2unix m.txt

然后重新运行您的命令。

我知道这是一个老问题,但是只要运行命令
export LC_ALL='C'
就可以按照
sort:Set LC_ALL='C'所述的技巧解决问题。

您好,这会给出此消息“dos2unix:Binary symbol 0x1A在第11451024行找到dos2unix:skiping Binary file m.txt”然后,当我尝试原始命令时,我得到了相同的错误。有什么想法吗?@hjalpmig你知道这个文件的编码吗?也就是说,是UTF-8、Windows代码页X还是其他编码?这个文件是如何创建的?当用Windows编辑器打开时,它看起来很好吗?当用文本编辑器(记事本)打开时,它看起来很好。我不完全确定编码,但它包含威尔士语字符,如–、ê、î、ŵ、ŷ。我还尝试使用-f命令运行dos2unix,但当我尝试排序时,出现了相同的错误。使用
locale-a
列出可用的区域设置,然后使用例如
export LC\u ALL=en\u US.UTF-8
。使用
locale
验证设置,然后再次运行管道。如果您怀疑编码是ISO8859,请使用适当的语言环境进行同样的操作。我相信威尔士语将成为“ISO/IEC 8859-14”的一部分。如何将区域设置更改为该设置?当用'locale-a'列出区域设置时,它不会显示。
dos2unix
不会导致一条长线;只有Windows工具不理解Unix行结尾。不要使用Windows编辑器查看Unix文件,使用Unix编辑器,如
vi
,您将在一行中看到每个单词。并确保使用cygwin排序程序,而不是Windows排序程序。使用
/usr/bin/sort
来确定。啊,我明白了。我的问题还没有完全解决,但我想现在它已经偏离了原来的问题太远了,所以我创造了另一个问题。我现在结束这个问题,谢谢你的帮助。
dos2unix m.txt