CSV - Convertendo SOMAS Colunas em Linhas com dados duplicados

2

Estou trabalhando com um fornecedor que não responde, cujos arquivos CSV para inventário são completamente não pesquisáveis pelo Excel. Minha equipe não tem conhecimento ou uso do Unix, mas sei que um simples loop IF ou dois com awk ou sed resolverão meu problema.

O arquivo bruto vem para mim assim:

Col1 Col2    ... Col8 ..... Col30 Col31 .. Col30+N
---------------------
UPC MasterSKU ...  UnitCost ..... AltSKU1 AltSKU2 .. AltSKU_N

Alguns MasterSKUs têm apenas alguns AltSKUs, alguns têm até 318. Esse número máximo pode mudar mensalmente!

Exemplo:

UPC MasterSKU  Cost AltSKU1 AltSKU2 .... AltSKU_N
------------------------------------------------------
10000001  ABC  $5.00  ABC01 ABC001 ABC1
10000002  BCD  $2.34  BCD01 BCD.go BD.c.2 ...200 AltSKUs later... BDDCD7

Como minha equipe precisa do Excel e os algoritmos de busca são limitados lá, preciso de todos os AltSKUs listados em uma única coluna e um custo próximo a eles.

Isso é o que espero ter como saída:

UPC MasterSKU  Cost AltSKU
--------------------------
10000001  ABC  $5.00  ABC01
10000001  ABC  $5.00  ABC001
10000001  ABC  $5.00  ABC1
10000002  BCD  $2.34  BCD01
10000002  BCD  $2.34  BCD.go
10000002  BCD  $2.34  BCD01

 ... repeat for 200 AltSKUs

10000002  BCD  $2.34  BDDCD7

NOTA: o que aconteceu com o ABC MasterSKU. Como existem apenas 3 AltSKUs, existem apenas 3 linhas. Não há 315 AltSKUs em branco depois dos 3 primeiros AltSKUs que não estão em branco

Alguém pode ajudar com isso?

    
por C.A.R. 18.06.2017 / 18:55

1 resposta

2

Uma maneira de fazer isso no awk seria:

Código:

$ awk '{ for (i=4; i <= NF; i++) print $1, $2, $3, $i }' file1 

file1:

10000001 ABC $5.00 ABC01 ABC001 ABC1
10000002 BCD $2.34 BCD01 BCD.go BD.c.2 BDDCD7

Resultados:

10000001 ABC $5.00 ABC01
10000001 ABC $5.00 ABC001
10000001 ABC $5.00 ABC1
10000002 BCD $2.34 BCD01
10000002 BCD $2.34 BCD.go
10000002 BCD $2.34 BD.c.2
10000002 BCD $2.34 BDDCD7
    
por 18.06.2017 / 20:10