Pegue os dados de um campo e insira na nova linha

3

Eu tenho um tsv como abaixo:

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

Eu preciso extrair a quarta coluna para pegar os valores separados pelas vírgulas e colocá-los em sua própria linha, dando a eles sua própria linha, se houver mais de um valor na coluna. por exemplo:

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

Eu tentei:

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

Estou sentindo falta do resto ...

    
por Maria 06.07.2018 / 16:35

1 resposta

2

Awk solução:

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

A saída:

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
    
por 06.07.2018 / 16:50

Tags