awk- Combina 2 arquivos .csv baseados em uma coluna correspondente

1

Eu tenho dois arquivos .csv (separados por vírgulas) com muitas linhas. Abaixo estão as entradas de amostra desses dois arquivos: n.csv:

X,I180,10.5.5.180,,833-006366,00,N-D,,,5.2,A52.604,5.2.02,,,,,,,8471 FX,,,,,

f.csv:

X,3FE,1,I180,,,,I180:LT13,,,,,,,,,,,0,,,,,,NLS-A

O que eu quero fazer é:

  • 1) busque os campos: $ 2, $ 4, $ 8, $ 12, $ 25 do f.csv e imprima-os nas primeiras colunas do novo arquivo .csv de saída;
  • 2) Buscar o campo: $ 7 do arquivo n.csv se o $ 2 de n.csv corresponder aos $ 4 de f.csv e imprimi-lo na última coluna do novo arquivo .csv de saída.

Assim, o resultado desejado deve ser:

3FE,I180,I180:LT13,,NLS-A,N-D

Eu tentei seguir o comando, mas ele imprime o arquivo $ 7 do n.csv na última coluna:

awk 'BEGIN { FS = OFS = "," ; } FNR==NR{ne_model[$2]=$7;x[$2]=$2;next} { if ($4!="" && $4 in x)  {print $2,$4,$8,$12,$25,ne_model[$2]} }' n.csv f.csv
3FE,I180,I180:LT13,,NLS-A,

Você poderia, por favor, ajudar a descobrir o que está perdendo?

    
por Murat 06.04.2018 / 13:24

1 resposta

0

você não corresponde $2 de n.csv a f.csv

tente

awk 'BEGIN { FS = OFS = "," ; } 
  FNR==NR{ne_model[$2]=$7;x[$2]=$2;next} 
  { if ($4!="" && $4 in x)  {print $2,$4,$8,$12,$25,ne_model[x[$4]]} }' n.csv f.csv

Substituo ne_model[$2] por ne_model[x[$4]] (e derramou em várias linhas por legibilidade)

que dão

3FE,I180,I180:LT13,,NLS-A,N-D
    
por 06.04.2018 / 13:38