Aqui está uma maneira de fazer isso usando o Bash:
#!/bin/bash
# read the line to act upon
line=$(head -n 1 $1)
while read substitution
do
# get the first field, delimited by a comma
findvar='echo $substitution | cut -d, -f1'
# remove the quotes and get the second field, delimited by a space
replacevar='echo $substitution | sed 's/"//g' | cut -d' ' -f2'
# replace all occurrences of the find variable with the replacement
line=${line//$findvar/$replacevar}
done < $2
echo $line
Se esse script é chamado
substitute.sh
então você poderia ligar
sh substitute.sh file1 file2.csv
Isso está fazendo várias suposições:
- Seu CSV está no formato que você descreve. No seu exemplo, os valores na primeira coluna não são citados, mas os valores na segunda coluna são. Além disso, o exemplo inclui um espaço após o delimitador. Você precisaria ajustar o script se o formato CSV real for diferente.
- Como as substituições do CSV são processadas uma por vez, é possível que uma substituição posterior corresponda a uma substituição feita anteriormente. Isso pode não ser sua intenção.
Por exemplo, se sua linha de entrada for
foo bar baz
E o seu arquivo CSV com substituições é
foo, "bar"
bar, "baz"
Você pode pretender que o resultado seja
bar baz baz
Mas o resultado seria
baz baz baz