insere o valor do arquivo de referência

1

Eu tenho um arquivo csv diário com milhares de linhas.
Fui solicitado a concatenar duas colunas e, em seguida, inserir uma nova coluna quando um valor em uma determinada coluna corresponder a uma tabela de outro arquivo. Valores vazios são esperados.

simplificando os dados (a coluna 3 é concatenada):

daily.csv

HVDS,1810,HVDS_1810,"match value",xxxxx
HVRS,5230,HVRS_5230,"match value",xxxxx
WPHV,0,WPHV_0000,"no match",xxxxx
O arquivo de referência

tem duas colunas, pesquisando $ 1 e inserindo $ 2 acima

ref.csv

HVDS_1810,dfTVfsd
HVRS_5230,UtsfeOO
WPHV_4242,BBnnstd

Apenas algumas ideias necessárias sobre por onde começar.

    
por Mickey 17.04.2015 / 00:59

1 resposta

0

Se eu entendi corretamente, sua pergunta "sem correspondência" deve ser substituída por valores de ref.csv . Uma possível solução é com awk :

awk -F',' 'BEGIN { OFS = "," } FNR==NR { m[$1] = $2; next; } { if ($3 in m) { $4 = "\"" m[$3] "\""; } else { $4 = "\"" "\""; } print; }' ref.csv daily.csv

Explicação:
FNR==NR é verdadeira enquanto o primeiro arquivo é lido.
Criamos array m com primeira coluna de índice e terceira coluna de valor.
Então, no segundo bloco, lemos o segundo arquivo (por causa da diretiva next no primeiro bloco), verifique se a coluna 3 é o índice da matriz m e, se sim, definir o novo valor da coluna. Se não, nós definimos o valor vazio.

    
por 17.04.2015 / 01:17