如何在 CSV 文件(使用 bash)中\n
每四个分隔符后添加一个?;
输入文件示例:
aaaa;bbbbbb;cccc;ddddd;eeee;ffff;gggg;hhhh;iii;jjjj;kkkk;llll;
需要输出:
aaaa;bbbbbb;cccc;ddddd
eeee;ffff;gggg;hhhh
iii;jjjj;kkkk;llll
使用(GNU)sed
:
... | sed -r 's/([^;]*;){4}/&\n/g'
[^;]*;
匹配不是分号后跟分号的字符序列。
(...){4}
匹配括号内表达式的 4 倍。
&
替换中是找到的整个匹配项。
\n
是换行符。
修饰符g
makesed
替换每个输入行中的所有匹配项,而不仅仅是每行的第一个匹配项。
将每一行读入一个数组,然后一次打印 4 组,printf
直到该行用完。
while IFS=';' read -a line; do
printf '%s;%s;%s;%s\n' "${line[@]}"
done < input.txt
Perl 解决方案:
perl -pe 's/;/++$i % 4 ? ";" : "\n"/ge; chomp'
仅当字段数可被四整除时才有效。
这可能对您有用(GNU sed):
sed 's/;/\n/4;/./P;D' file