我需要分割一个文件。我通常使用,split
但这次我需要分割后的文件与原始文件具有相同的编码类型。我有原始文件:
eianni@ianni-desktop:~/Desktop$ file FCAna.txt
FCAna.txt: ISO-8859 text, with CRLF line terminators
新的有:
eianni@ianni-desktop:~/Desktop$ file xaa
xaa: ISO-8859 text, with CRLF line terminators
eianni@ianni-desktop:~/Desktop$ file xab
xab: Non-ISO extended-ASCII text, with CRLF line terminators
第二个不行。我该如何解决这个问题?执行的命令是
split --lines=1588793 FCAna.txt
答案1
我认为这可能是工作方式的问题file
。从手册页中可以看到:
ASCII、ISO-8859-x、非 ISO 8 位扩展 ASCII 字符集(例如在 Macintosh 和 IBM PC 系统上使用的字符集)、UTF-8 编码的 Unicode、UTF-16 编码的 Unicode 和 EBCDIC 字符集可以通过每组中构成可打印文本的字节的不同范围和序列来区分。
我对这句话的解释是,file
确定所用编码的能力取决于文本文件中是否有某些字符,这些字符可以清楚地表明编码是什么。因此,对于 UTF,字节的大小或是否存在物料清单可以使用。您的原始文本文件可能使用了只能用扩展 ASCII 字符集编码的字符(可能是磅号 (£)?),因此file
确定它是 ISO 8859 文件。但现在文件已拆分,该符号仅出现在第一个文件中,而不出现在第二个文件中。您应该能够通过在文本中搜索“扩展”字符并在不同点进行拆分来测试此假设。
作为测试我做了以下事情:
[root@blah ~]# echo "this is a test of text encoding" > test_encoding.txt
[root@blah ~]# file test_encoding.txt
test_encoding.txt: ASCII text
[root@blah ~]# echo "£" >> test_encoding.txt
[root@blah ~]# file test_encoding.txt
test_encoding.txt: ISO-8859 text
[root@blah ~]#
file
您需要匹配报告的文件编码的原因是什么?
答案2
这是行终止问题。也许可以使用选项告诉 split 按行中断-l
?