在不破坏编码的情况下使用 split

die*_*rre 2 linux

我需要拆分一个文件。我通常使用,split但这次我需要具有与原始编码类型相同的拆分文件。我有原文:

eianni@ianni-desktop:~/Desktop$ file FCAna.txt 
FCAna.txt: ISO-8859 text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)

而新的是:

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

第二个不行。我该如何解决这个问题?执行的命令是

split --lines=1588793 FCAna.txt
Run Code Online (Sandbox Code Playgroud)

web*_*toe 5

我认为这可能取决于file工作方式。从联机帮助页阅读:

ASCII、ISO-8859-x、非 ISO 8 位扩展 ASCII 字符集(例如 Macintosh 和 IBM PC 系统上使用的字符集)、UTF-8 编码的 Unicode、UTF-16 编码的 Unicode 和 EBCDIC 字符集可以通过构成每个集合中可打印文本的不同范围和字节序列来区分。

我对这个语句的解释是,它file确定所使用的编码的能力是基于文本文件中是否有某些可用的字符使编码是显而易见的。因此对于 UTF,可以使用字节的大小或BOM 的存在。您的原始文本文件可能使用了只能以扩展 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 ~]#
Run Code Online (Sandbox Code Playgroud)

您是否需要file匹配报告的文件编码?