将多个列转换为逗号分隔的csv中的行

时间:2014-02-12 15:38:45

标签: sed awk

我想将多个列转换为行。

e.g

输入:

 A,0,10,12,14,16,2,
 B,10,10P

输出:

 A,0,0
 A,10,10
 A,12,12
 A,14,14
 A,16,16
 A,2,2
 B,10,10
 B,10P,10p

我尝试但不确定如何重复某些列。

awk '{FS=",";OFS="\n"}{print $1, $2, $3, $4, $5}' filename

2 个答案:

答案 0 :(得分:3)

这可以是一种方式:

$ awk 'BEGIN{FS=OFS=","}{for (i=2;i<=NF; i++) print $1, $i, $i}' file
A,0,0
A,10,10
A,12,12
A,14,14
A,16,16
A,2,2
B,10,10
B,10P,10P

解释

  • BEGIN{FS=OFS=","}将输入和输出字段分隔符设置为逗号。
  • for (i=2;i<=NF; i++) print $1, $i, $i遍历第二个字段,打印第一个字段加上第二个字​​段。

请注意,您的尝试awk '{FS=",";OFS="\n"}{print $1, $2, $3, $4, $5}' filename在每一行都设置了FSOFS,而最好在BEGIN{}块中执行一次。

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/^([^,]+)(,[^,]+)/&\2\n\1/;//P;D' file