我有一个100M行文件,它有一些编码问题 - “最初”是EBCDIC,保存为US-ASCII,现在是UTF-8。我不太了解它的遗产,对不起 - 我刚被要求分析内容。
EBCDIC中的“分”字符在随机位置“隐藏”在此文件中,导致各种错误。以下是关于此问题的更多内容:cents character in hex
使用iconv -f foo -t UTF-8 -c转换此文件不起作用 - 以美分字符为准。
当我使用十六进制编辑器时,我可以找到0xC2 0xA2(c2a2)的外观。但在BIG文件中,这并不理想。 Sed不能在十六进制级别工作,所以...不确定tr - 我只用它来回车/换行。
我可以用什么linux实用程序/命令在非常大的文件上快速找到并删除这个字符?
2部分:
1 -- utility / command to find / count the number of these occurrences (octal \242)
2 -- command to replace (this works tr '\242' ' ' < source > output )
文本如何显示在我的ubuntu终端上:
1019EQ?IT DEPT GENERATED
使用xxd,它如何看待十六进制级别(ascii到侧面看起来与上面相同):
0000000: 3130 3139 4551 a249 5420 4445 5054 2047 454e 4552 4154 4544 0d0a
使用xxd,看看“show ebcdic”的样子 - 在这里,只是从侧面显示ebcdic:
......s.....&....+........
所以十六进制“a2”是罪魁祸首。我现在正在尝试xxd -E foo | grep a2来计算实例数。
为感兴趣的人添加od -ctxl而不是xxd的输出:
0000000 1 0 1 9 E Q 242 I T D E P T G
31 30 31 39 45 51 a2 49 54 20 44 45 50 54 20 47
0000020 E N E R A T E D \r \n
45 4e 45 52 41 54 45 44 0d 0a
答案 0 :(得分:1)
当你说文件被转换时,你的意思是什么?你是说二进制文件只是从IBM 360转储到另一台基于ASCII的计算机,还是文件本身在转移时转换为ASCII?
问题是文件是否实际上处于编码良好的状态。另一个问题是你希望如何编码文件?
在我的Mac上(默认使用UTF-8,就像Linux系统一样),使用sed
摆脱¢
字符没有问题:
这是我的档案:
$ cat test.txt
This is a test --¢-- TEST TEST
$ od -ctx1 test.txt
0000000 T h i s i s a t e s t -
54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 2d
0000020 - ¢ ** - - T E S T T E S T \n
2d c2 a2 2d 2d 20 54 45 53 54 20 54 45 53 54 0a
0000040
您可以看到cat
打印出¢
字符没有问题。并且,您可以在od
转储中看到c2a2
字符的¢
编码。
$ sed 's/¢/$/g' test.txt > new_test.txt
$ cat new_test.txt
This is a test --$-- TEST TEST
$ od -ctx1 new_test.txt
0000000 T h i s i s a t e s t -
54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 2d
0000020 - $ - - T E S T T E S T \n
2d 24 2d 2d 20 54 45 53 54 20 54 45 53 54 0a
0000037
这是我的sed将¢
更改为$
符号没有问题。转储现在显示此测试文件等同于严格的ASCII编码文件。编码¢
的两个十六进制数字现在是一个很好的干净单个十六进制数字编码$
。
看起来sed
可以解决您的问题。
如果要在Windows系统上使用此文件,可以将文件转换为标准Windows代码页面1252:
$ iconv -f utf8 -t cp1252 test.txt > new_test.txt
$ cat new_test.txt
This is a test --?-- TEST TEST
$ od -ctx1 new_test.txt
0000000 T h i s i s a t e s t -
54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 2d
0000020 - 242 - - T E S T T E S T \n
2d a2 2d 2d 20 54 45 53 54 20 54 45 53 54 0a
0000037
以下是Codepage 1252中的文件,就像Windows喜欢它一样!请注意,¢
现在是一个很好的十六进制242字符。
那么,究竟是什么问题呢?您需要以纯ASCII定义 127个字符进行归档吗?您是否需要编码的文件,因此Windows机器可以使用它?你输入¢字符有问题吗?
让我知道。我不是来自政府,但我来这里是为了帮助你。