Bash 添加'\n';在特定数量的分隔符之后

Bash 添加'\n';在特定数量的分隔符之后,bash,csv,sed,awk,cut,Bash,Csv,Sed,Awk,Cut,如何在每四个之后添加一个\n分隔符(使用bash) 输入文件示例: aaaa;bbbbbb;cccc;ddddd;eeee;ffff;gggg;hhhh;iii;jjjj;kkkk;llll; 所需产出: aaaa;bbbbbb;cccc;ddddd eeee;ffff;gggg;hhhh iii;jjjj;kkkk;llll 将每一行读入一个数组,然后使用printf一次打印4组,直到行用完 while IFS=';' read -a line; do printf '%s;%s;

如何在每四个
之后添加一个
\n
分隔符(使用bash)

输入文件示例:

aaaa;bbbbbb;cccc;ddddd;eeee;ffff;gggg;hhhh;iii;jjjj;kkkk;llll;
所需产出:

aaaa;bbbbbb;cccc;ddddd
eeee;ffff;gggg;hhhh
iii;jjjj;kkkk;llll

将每一行读入一个数组,然后使用
printf
一次打印4组,直到行用完

while IFS=';' read -a line; do
    printf '%s;%s;%s;%s\n' "${line[@]}"
done < input.txt
而IFS=';'读一行;做
printf“%s;”s、 %s、 %s\n“${line[@]}”
完成
Perl解决方案:

perl -pe 's/;/++$i % 4 ? ";" : "\n"/ge; chomp'
仅当字段数可被四整除时有效。

使用(GNU)
sed

... | sed -r 's/([^;]*;){4}/&\n/g'
[^;]*匹配不是分号后跟分号的字符序列

(…){4}
匹配括号内表达式的4倍

替换中的
&
是找到的全部匹配项

\n
是换行符

修饰符
g
make
sed
替换每个输入行中的所有匹配项,而不是每行中的第一个匹配项。

这可能适用于您(GNU-sed):


请解释一下您使用的regexp,好吗?+1,但请注意,如果有空字段,这将导致行为错误。(为了处理这种情况,我认为您需要使用
-d';'
而不是
IFS=';'
,并相应地调整您的逻辑。)
sed 's/;/\n/4;/./P;D' file