每固定字节数添加一个换行符

Add a line break every fix number of byte

我正在使用 AIX 和 ksh。

我有一个没有换行符的非常大的文件。我确定该文件是从固定记录长度文件生成的。

例如,如果文件大小为123456789000,则文件应包含123456789条记录,每条1000字节。

因为缺少换行字符,即LF,所以很难处理这个文件。

我试过使用 bs=1000 的 dd 命令。但是,似乎不能在每个块之后添加 \n。

使用split命令可以将文件拆分成123456789个文件,每个1000字节大小。那就麻烦继续了。

有没有办法每1000字节加一个\n?

如果我能每1000字节加回\n,我会更容易处理文件。

顺便说一句,更喜欢使用 ksh 脚本,没有 python,没有 perl。没有 C 编译器。

提前致谢。

那是一条大线。你可以试试这个:

while IFS= read -rn 1000 chars || [[ -n $chars ]]; do 
    printf "%s\n" "$chars"
done < file.in > file.out

如果您遇到错误,我不会感到惊讶。

不太优雅,但适用于 AIX:

#!/bin/sh

while dd bs=1000 count=1 2>ddstat.tmp; head -n1 ddstat.tmp |\
      grep -v -q '^0+0 records in'; do
    printf '\n'
done <split.in >split.out

编辑:没有临时 'ddstat.tmp' 文件的版本:

#!/bin/sh

exec 4>split.out

while dd bs=1000 count=1 2>&1 >&4 | head -n1 |\
      grep -v -q '^0+0 records in'; do
    printf '\n' >&4
done <split.in

您可以使用

fold -w 1000 inputfile > outputfile