将csv中的列重新排列为新行

时间:2016-05-18 12:12:42

标签: bash

我有以下csv:

1,host1,group1,group2
2,host2,group3,group4
3,host3,group5
4,host4,group6,group7,group8

我想实现以下目标:

1,host1,group1
1,host1,group2
2,host2,group3
2,host2,group4
3,host3,group5
4,host4,group6
4,host4,group7
4,host4,group8

如何使用linux命令行执行此操作?

2 个答案:

答案 0 :(得分:6)

$ awk -F , -v OFS=, '{for(i=3;i<=NF;i++) print $1,$2,$i}' data 
1,host1,group1
1,host1,group2
2,host2,group3
2,host2,group4
3,host3,group5
4,host4,group6
4,host4,group7
4,host4,group8

答案 1 :(得分:1)

awk 'BEGIN{FS=","}
     {nf=NF;count=3;
     while(nf-2>0){
     printf "%s,%s,%s\n",$1,$2,$count;
     count++;nf--
     }
     }' your_file

也会给你想要的结果。

1,host1,group1
1,host1,group2
2,host2,group3
2,host2,group4
3,host3,group5
4,host4,group6
4,host4,group7
4,host4,group8