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

时间:2013-08-14 18:36:48

标签: bash csv sed awk cut

如何在CSV文件中使用每个四个\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

4 个答案:

答案 0 :(得分:3)

使用(GNU)sed

... | sed -r 's/([^;]*;){4}/&\n/g'

[^;]*;匹配一系列不是分号后跟分号的字符。

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

替换中的

&是找到的整个匹配。

\n是换行符。

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

答案 1 :(得分:2)

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

while IFS=';' read -a line; do
    printf '%s;%s;%s;%s\n' "${line[@]}"
done < input.txt

答案 2 :(得分:1)

Perl解决方案:

perl -pe 's/;/++$i % 4 ? ";" : "\n"/ge; chomp'

仅当字段数可被4整除时才有效。

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/;/\n/4;/./P;D' file