2

如何在 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
4

4 回答 4

4

使用(GNU)sed

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

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

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

&替换中是找到的整个匹配项。

\n是换行符。

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

于 2013-08-14T18:44:53.413 回答
2

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

while IFS=';' read -a line; do
    printf '%s;%s;%s;%s\n' "${line[@]}"
done < input.txt
于 2013-08-14T18:41:28.943 回答
1

Perl 解决方案:

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

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

于 2013-08-14T18:41:55.910 回答
0

这可能对您有用(GNU sed):

sed 's/;/\n/4;/./P;D' file
于 2013-08-14T21:49:12.627 回答