我正在使用Redhat Linux 6。
我有一个文件,应该来自大型机MVS与EBCDIC-ASCII转换。
(但我怀疑某些转换可能是错误的)
无论如何,我知道记录长度是2391字节。共有10条记录,文件大小为23910字节。
对于每个2391字节的记录,有许多0a或0d字符(不是CRLF)。我想用“和”来代替它们。
另外,我想每2391字节添加一个LF(即0a),以便使该文件成为一个普通的unix文本文件以供进一步处理。
我试着用
dd ibs=2391 obs=2391 if=emyfile of=myfile.new
但是,这是行不通的。两个文件都是一样的。
我也试着
dd ibs=2391 obs=2391 if=myfile | awk'{打印$0}'
但是,这也不管用
有人能帮忙吗?

最佳答案

你可以试试

$ dd bs=2391 cbs=2391 conv=ascii,unblock if=emyfile of=myfile.new

conv=ascii从EBCDIC转换为ASCII。conv=unblock在每个大小为cbs的块的末尾插入新行(删除尾随空格后)。
如果您已经有一个ASCII文件,只想在分割块之前替换其中的一些字符,那么可以使用tr(1)。例如,下面将每个回车替换为“#”,每个换行符(换行符)替换为“@”:
$ tr '\r\n' '#@' < emyfile | dd bs=2391 cbs=2391 conv=unblock of=myfile.new

关于linux - 每2391个字节添加换行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29117578/

10-10 17:46