次の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