我有一个如下所示的 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
我需要提取第四列,获取用逗号分隔的值,并将它们放入自己的行中,如果该列中的值超过 1 个,则为它们提供自己的行。例如:
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