$ awk -F: 'FNR==NR{a[$1]=$2;next} {for (i in a)sub(i, a[i]);print}' file1 file2
f
d
b
Como funciona
-
-F:
Isso diz
awk
para dividir campos nos dois pontos. -
FNR==NR{a[$1]=$2;next}
Ao ler o primeiro arquivo, isso diz a
awk
para criar um dicionárioa
das traduções que queremos fazer. -
for (i in a)sub(i, a[i])
Ao ler o segundo arquivo, isso indica ao
awk
para substituir todas as entradas que armazenamos em nosso dicionárioa
. -
print
Depois de termos feito as substituições, isso diz
awk
para imprimir a linha.
Substituindo arquivo2
Para substituir file2
pela nova versão:
awk -F: 'FNR==NR{a[$1]=$2;next} {for (i in a)sub(i, a[i]);print}' file1 file2 >tmp && mv tmp file2
Com versões muito recentes de awk
, há uma opção de atalho para isso: -i inplace
. Sob a superfície, porém, o que essa opção faz é exatamente o que o comando acima faz.