$ 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
awkpara dividir campos nos dois pontos. -
FNR==NR{a[$1]=$2;next}Ao ler o primeiro arquivo, isso diz a
awkpara criar um dicionárioadas traduções que queremos fazer. -
for (i in a)sub(i, a[i])Ao ler o segundo arquivo, isso indica ao
awkpara substituir todas as entradas que armazenamos em nosso dicionárioa. -
printDepois de termos feito as substituições, isso diz
awkpara 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.