Eu recomendo strongmente escrever este script específico em Python ao invés de qualquer ferramenta shell, simplesmente porque a biblioteca padrão do Python inclui um analisador CSV que realmente manipula todas as rugas malucas na sintaxe CSV. Você faria algo assim:
import csv
import sys
# sys.argv[1] = "aaa.csv", sys.argv[2] = "bbb.csv"
# sys.argv[3] = default value for mapping
# output written to stdout
with open(sys.argv[2], "rt") as f:
rd = csv.reader(f, dialect="unix", delimiter=";")
mapping = { row[0] : row[1] for row in rd }
with open(sys.argv[1], "rt") as f:
rd = csv.reader(f, dialect="unix", delimiter=";")
wr = csv.writer(sys.stdout, dialect="unix", delimiter=";",
quoting=csv.QUOTE_MINIMAL)
for row in rd:
wr.writerow([row[0], mapping.get(row[0], sys.argv[3])])
e depois executá-lo como, por exemplo, python munge.py aaa.csv bbb.csv "" > ccc.csv
.
Em geral, se não for óbvio como fazer algo em um shell script, considere não fazê-lo em um shell script . A menos que portabilidade para instalações arbitrariamente encrostadas seja mais importante do que qualquer outra coisa (por exemplo, nas entranhas de uma macro do Autoconf) você será mais feliz escrevendo Perl, Python, Ruby, node.js, etc.