如何在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
答案 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