Eu tenho dois arquivos separados por vírgula, conforme mencionado abaixo,
cat source.txt
A,1000
B,3000
C,2500
D,5000
E,4000
F,3000
cat test.txt
A,1000
C
D,5000
B
E
Como posso atualizar o arquivo test.txt consultando o arquivo source.txt, de modo que a saída esperada seja a seguinte,
cat test.txt
A,1000
C,2500
D,5000
B,3000
E,4000
Tentar:
Como funciona:
-F, -v OFS=,
Isso define o separador de campo de entrada e saída para uma vírgula.
FNR==NR{a[$1]=$2; next}
Ao ler o primeiro arquivo,
source.txt
, salve o valor do segundo campo,$2
, no array associativoa
sob a chave do primeiro campo,$1
. Em seguida, pule o resto dos comandos e pule para recomeçar nanext
linha.NF==1{$2=a[$1]}
Se a linha atual tiver apenas um campo, atribua o segundo campo ao valor no array associativo
a
.1
Este é um atalho para imprimir a linha .
Fazendo alterações permanentes no arquivo
Com qualquer versão do awk, podemos fazer uma atualização permanente no arquivo
test.txt
com (recomendado):Alternativamente, se alguém tiver uma versão recente do GNU
awk
(às vezes chamada degawk
):Eu fiz pelo método abaixo e funcionou bem
comando:
resultado