フィールドからデータを取得して新しい行に挿入

フィールドからデータを取得して新しい行に挿入

次のTSVがあります。

1   2   3   4,5,6   a
1   2   3       b
2   7   9   1,2 c   
0   7   9   1,6,7,7 d

4番目の列を抽出し、カンマで区切られた値を取得して独自の行に入れる必要があります。列に複数の値がある場合は、独自の行を指定する必要があります。たとえば、

1   2   3   4   a
            5
            6
            7       
1   2   3       b
2   7   9   1   c   
            2           
0   7   9   1   d
            6
            7
            7

私は試した:

awk -F'\t' '{split($4,a,",");for(i in a)if(!seen[a[i]]++)print a[i]}' /report/temp2.tsv > /report/temp3.tsv

しかし、残りは恋しいです...

ベストアンサー1

Awk解決策:

awk 'NF == 4{ $4 = OFS $4 }
     NF == 5 && $4 ~ /,/{
         len = split($4, a, ",");
         sub(/,.+/, "", $4); print $0;
         for(i = 2; i <= len; i++) print OFS OFS OFS a[i];
         next
    }1' OFS='\t' file

出力:

1   2   3   4   a
            5
            6
1   2   3       b
2   7   9   1   c
            2
0   7   9   1   d
            6
            7
            7

おすすめ記事