从一个字段中获取数据并插入到新行中

从一个字段中获取数据并插入到新行中

我有一个如下所示的 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

相关内容