![从一个字段中获取数据并插入到新行中](https://linux22.com/image/136415/%E4%BB%8E%E4%B8%80%E4%B8%AA%E5%AD%97%E6%AE%B5%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE%E5%B9%B6%E6%8F%92%E5%85%A5%E5%88%B0%E6%96%B0%E8%A1%8C%E4%B8%AD.png)
我有一个如下所示的 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