2012-12-04 31 views
0

我有一个包含逗号分隔列的表格,我想将指定列中的逗号分隔值分隔为新行。例如,给定的表是将指定列中的逗号分隔单元格与使用shell脚本的新行分隔开

名称开始名称2

甲1,2 X,一个

B 5 Y,B

Ç6,7,8 Z,C

,我需要的逗号分隔值列2分离,以获得低于

名称开头的表名2

A 1 X,一个

A 2 X,一个

B 5 Y,B

C 6 Z,C

的C 7 Z,C

-C 8ž ,c

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

回答

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}}' 
+0

我已经测试过这个剧本,完美! – Runner

+0

感谢您的更新。 awk命令的运行速度比以前的脚本要快得多(对于25000行文件,<1秒,但另一个脚本需要几分钟的时间!!!)。顺便说一句,我可以更改awk命令的输出到制表符分隔表吗? – Runner

+0

我已经找到了如何定义输出分隔符。但我不明白为什么这里的默认输出分隔符是空格。在我的印象中,awk的默认输出应该是制表符分隔的。 – Runner