テーブルの行を列に変換

テーブルの行を列に変換

これは私の1.fileです(区切り記号は「\ t」です)。

 ot1     a       a,b,c,d,e
 ot2     b       b,c,q
 ot3     c       c,f,g
 ot4     e       a,g,e

2.fileをインポートしたい(区切り記号は「\ t」です)。

 ot1     a       a
 ot1     a       b
 ot1     a       c
 ot1     a       d
 ot1     a       e
 ot2     b       b
 ot2     b       c
 ot2     b       q
 ot3     c       c
 ot3     c       f
 ot3     c       g
 ot4     e       a
 ot4     e       g
 ot4     e       e

まず、"sed -i "s/,/\n/g"を試してみましたが、次に何をすべきかわかりません。助けてくれてありがとう。

ベストアンサー1

次の操作が実行されます。

awk -F\\t 'BEGIN {OFS=FS} {n=split($3,aa,",");for (i=1;i<=n;i++) {$3=aa[i]; printf "%s\n" $0 }}' 

最初のタブ区切り文字にはダブルエスケープが必要です。

次に、3番目のタグを分割し、分割配列の要素数を取得します。

次に、ループの3番目のタグを分割要素に置き換えて印刷します。

おすすめ記事