将指定列中的逗号分隔单元格分隔为具有shell脚本的新行

时间:2012-12-04 17:37:47

标签: linux bash shell bioinformatics

我有一个包含逗号分隔列的表,我想将指定列中的逗号分隔值分隔为新行。例如,给定的表是

名称开始名称2

1,2 X,a

B 5 Y,b

C 6,7,8 Z,c

我需要将第2列中的逗号分隔值分开以获得下面的表格

名称开始名称2

1 X,a

A 2 X,a

B 5 Y,b

C 6 Z,c

C 7 Z,c

C 8 Z,c

我想知道是否有任何shell脚本解决方案,以便我可以创建一个工作流管道。注意:原始表可能包含3列以上。

1 个答案:

答案 0 :(得分:0)

此bash解决方案可生成所需的输出

{
     read header; echo "$header"
     while read name start rest; do
         for elem in $(tr , " " <<< "$start"); do
             echo "$name $elem $rest"
         done
     done
} << END
Name Start Name2
A 1,2 X,a
B 5 Y,b
C 6,7,8 Z,c
END

更简洁

awk 'NR==1 {print; next} {split($2,a,/,/); for (i in a) {$2=a[i]; print}}'