2012-12-04 37 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