Parece-me que você deveria estar melhor fazendo algo como:
while IFS=, read -r name email x y _ignored_; do
email=${email# } x=${x# } y=${y# }
sendmail -oem -oi -t << EOF
To: $name <$email>
Subject: Whatever
x=$x y=$y
EOF
done < file.csv
Isso, já que você vai executar pelo menos um comando por linha, use o shell para ler as linhas em variáveis. E use a expansão de variável shell no documento here em vez de sed
para fazer a expansão do modelo.
awk
não ajudaria muito aqui, pois embora possa executar comandos com seu system()
ou getline()
(mas por meio da execução de um shell para analisar uma linha de comando), ele não pode definir variáveis de ambiente para aqueles, além de construir o código de shell que define essas variáveis. Então, isso se tornaria bastante complicado e menos eficiente. Algo como:
CODE='sendmail -oem -oi -t << EOF
to: $name <$email>
Subject: Whatever
x=$x y=$y
EOF' awk -F ', *' -v q="'" '
function shquote(s) {
gsub(q, q "\" q q, s)
return q s q
}
{system("name="shquote($1)" email="shquote($2)" x="shquote($3) \
" y="shquote($4)"\n"ENVIRON["CODE"])}' < file.csv