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
makesed
替换每个输入行中的所有匹配项,而不是每行中的第一个匹配项。这可能适用于您(GNU-sed):
请解释一下您使用的regexp,好吗?+1,但请注意,如果有空字段,这将导致行为错误。(为了处理这种情况,我认为您需要使用-d';'
而不是IFS=';'
,并相应地调整您的逻辑。)
sed 's/;/\n/4;/./P;D' file