用bash一次读取文件n个字符(不计算换行符)

T. *_*Kau 1 unix bash shell

如果有这样的文件:

abc
abc
abc
abc
abc
Run Code Online (Sandbox Code Playgroud)

并希望输出是

abcab
cabca
bcabc

Run Code Online (Sandbox Code Playgroud)

即我想一次读取5个字符并在线输出它们。

到目前为止,我已经试过如下:cat test | while read -N 5 a; do echo -n $a; printf '\n' ; done产生

abc a
bc ab
c abc
abc
Run Code Online (Sandbox Code Playgroud)

因此,发生的事情是它计算了换行符。如何防止这种情况发生?我正在使用的文件大小为几GB,因此仅将其重写为一行是不可行的。

我知道可以使用python / perl / ...轻松完成此操作,但是我想使用简单的unix工具进行操作。

Jon*_*Jon 5

如何tr删除新行,然后fold呢?

$ cat foo.txt
abc
abc
abc
abc
abc
$ tr -d '\n' <foo.txt | fold -w 5
abcab
cabca
bcabc$
Run Code Online (Sandbox Code Playgroud)

如果最后缺少换行符是一个问题,只需添加一个即可echo

$ tr -d '\n' <foo.txt | fold -w 5; echo
abcab
cabca
bcabc
$ 
Run Code Online (Sandbox Code Playgroud)