Tabela de processamento com valores separados por vírgulas em diferentes colunas

2

Estou tentando fazer o seguinte por um tempo, mas sem sucesso.

Os dados que recebi têm valores separados por vírgula em cada coluna separada. O primeiro valor na coluna 6 antes da vírgula é sempre relacionado ao primeiro valor na coluna 7 antes da vírgula. Eu quero extrair dados e colocá-los em uma tabela na ordem correta, como tal:

Dados de entrada:

1 2 3 4 5 A1,A2 B1,B2
1 7 3 3 5 C1,C2,C3 D1,D2,D3
1 2 R 4 b E1,E2,E3,E4 G1,G2,G3,G4

Dados de saída:

1 2 3 4 5 A1 B1
1 2 3 4 5 A2 B2
1 7 3 3 5 C1 D1 
1 7 3 3 5 C2 D2
1 7 3 3 5 C3 D3
1 2 R 4 b E1 G1
1 2 R 4 b E2 G2
1 2 R 4 b E3 G3
1 2 R 4 b E4 G4

Eu entendo que preciso dividi-los em \t antes de colocá-los em uma ordem de classificação, mas sou totalmente novo nisso e recebi dados tão grandes.

    
por royston 13.10.2015 / 05:57

1 resposta

1

com awk :

awk '{split($6,a,","); split($7,b,","); for(i in a){print $1,$2,$3,$4,$5,a[i],b[i]}}' file
  • awk lê o espaço de entrada ou delimitado por tabulações, padrão: [\t ]+ .
  • split($6,a,",") divide o sexto campo $6 separado por vírgula , e armazena a saída em uma matriz chamada a .
  • split($7,b,",") divide o sétimo campo $7 separado por vírgula , e armazena a saída em uma matriz chamada b .
  • for(i in a) agora passa pela matriz a ...
    • print ...,a[i],b[i] ... e imprima os valores $1 a $5 e os dois valores da matriz a[i] e b[i] pelos seus índices i .

A saída:

1 2 3 4 5 A1 B1
1 2 3 4 5 A2 B2
1 7 3 3 5 C1 D1
1 7 3 3 5 C2 D2
1 7 3 3 5 C3 D3
1 2 R 4 b E1 G1
1 2 R 4 b E2 G2
1 2 R 4 b E3 G3
1 2 R 4 b E4 G4
    
por 13.10.2015 / 07:42