substitui a nona coluna de um arquivo csv pela ajuda da tabela de consulta

3

Eu tenho um arquivo csv (a.csv) como abaixo (com milhares de linhas):

NMS_NE,,,,,,,,,,,,,,,,,,,,,,,
D,NE Name,IP Address,Site Name,Product UPEI,Product Name,Product Model,NE Status,Serial Number,SW Major Release,SW Minor Release,SW Patch Release,Manufacturing Date,Installation Date ,Into Service Date ,Licensed System ID,License Key,Decommissioning Date,Description,,,,,
X,a155,1.1.1.155,,,,audi,,,4.8,abc48.677,,,,,,,,,,,,,
X,b145,1.1.1.145,,,,bmw,,,4.3,abc43.489,,,,,,,,,,,,,
X,c198,1.1.1.198,,,,vw,,,4.4,abc44.779,,,,,,,,,,,,,
...

E eu tenho uma tabela csv de pesquisa (b.csv) como abaixo (com centenas de linhas):

model,product name
bmw,1.16
audi,a3
vw,golf
...

O que eu quero fazer é: pegar os valores de 'Product Model' (7th column) de a.csv e verificar este valor no arquivo b.csv. Se o valor do 'Product Model' (de a.csv) for igual ao valor 'model' (de b.csv), encontre o 'nome do produto' em relação ao valor 'model' correspondente em b.csv e substitua o 'Product Modelo 'de a.csv com o' nome do produto 'relevante de b.csv. Então o arquivo de saída deve ser:

NMS_NE,,,,,,,,,,,,,,,,,,,,,,,
D,NE Name,IP Address,Site Name,Product UPEI,Product Name,Product Model,NE Status,Serial Number,SW Major Release,SW Minor Release,SW Patch Release,Manufacturing Date,Installation Date ,Into Service Date ,Licensed System ID,License Key,Decommissioning Date,Description,,,,,
X,a155,1.1.1.155,,,,a3,,,4.8,abc48.677,,,,,,,,,,,,,
X,b145,1.1.1.145,,,,1.16,,,4.3,abc43.489,,,,,,,,,,,,,
X,c198,1.1.1.198,,,,golf,,,4.4,abc44.779,,,,,,,,,,,,,
...

Como posso fazer isso pelo simples comando awk?

    
por Murat 16.09.2015 / 11:08

1 resposta

2

Você pode tentar seguir awk :

awk 'BEGIN { FS = OFS = ","; } FNR == NR { x[$1] = $2; next; } { if ($7 in x) { $7 = x[$7]; } } 1' b.csv a.csv

Na seção BEGIN , definimos o separador de campo FS e o separador de campo de saída OFS to , . FNR == NR é um padrão que é verdadeiro ao ler o primeiro arquivo ( b.csv ), e nós criamos o array x com a coluna de formulário de chaves $1 e valores da coluna $2 . Na última seção, lemos o segundo arquivo e verificamos se a coluna $7 existe como uma chave da matriz e, se sim, alteramos o valor.

    
por 16.09.2015 / 11:14