(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-different-end-line-characters-in-text-files