(dd命令linux)最后一个字节转到下一行



嗨,朋友们,我需要一些帮助。

我们有一个工具可以将二进制文件转换为文本文件,然后存储到Hadoop(HDFS(中。

在生产中,该接收工具使用ftp从大型机下载二进制格式(EBCDIC(的文件,而在开发环境中,我们无法访问从大型机上下载的文件。

为了测试文件转换,我们手动创建文本文件,并尝试使用dd命令(linux(转换文件,使用以下参数:

dd if=asciifile.txt of=ebcdicfile conf=ebcdic

通过我们的转换工具后,预期结果是:

000000000000000               DATA
000000000000000               DATA
000000000000000               DATA
000000000000000               DATA

然而,它返回以下结果:

000000000000000               DAT
A000000000000000               DA
TA000000000000000               D
ATA000000000000000               

我尝试过cbs、obs和ibs参数,分配lrec(每行的行数(都没有成功。

有人能帮我吗?

需要考虑的几件事:

  1. 数据究竟是如何通过FTP传输的?您的"以二进制格式(EBCDIC(">根本没有任何意义。FTP要么以二进制格式传输,然后在传输过程中不会发生任何更改或转换。或者以文本模式进行FTP传输,也就是ASCII模式,然后将数据从特定的EBCDIC代码页转换为非EBCDIC代码页面。你需要知道什么模式,如果是文本模式,使用的两个代码页是什么
  2. dd的手册页中,不清楚哪些EBCDICASCII代码页用于转换。我只是猜测:EBCDIC代码页可能是CP-037,ASCII可能是CP-437。如果这些与FTP中使用的不匹配,则生成的测试数据是不正确的
  3. 我知道您无法访问开发环境中的生产数据。但是,您应该仍然能够使用FTP从大型机的开发中获取测试数据。如果没有,您将如何进行端到端测试

EBCDIC转换正在吞噬您的行结尾:

https://www.ibm.com/docs/en/zos/2.2.0?topic=server-文本文件中的不同结束行字符

最新更新