我有一个文件,其中每一行都是新的客户信息,例如
Pop corn, [email protected], 50, 200
我目前正在尝试查看是否有可能使用aawk/gawk script
将每一列分配给一个变量,然后用管道将这些变量sed
替换为模板?我将在bash脚本中同时运行awk / gawk和sed。我可以按照什么好的方法来完成这项工作?我正在尝试不使用grep
,因为我正在尝试学习如何一起使用awk / gawk,sed和bash脚本,或者perl
因为我还没有学过。
在我看来,您最好执行以下操作:
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
那是因为既然您无论如何都要在每行上运行至少一个命令,请使用shell将这些行读入变量。并在此文档中使用shell变量扩展而不是sed
模板扩展。
awk
它虽然可以用system()
或运行命令getline()
(但是通过运行外壳来解析命令行),但在这里并没有多大帮助,除了构建设置这些变量的外壳代码之外,它无法为它们设置环境变量。因此,它将变得非常复杂且效率较低。就像是:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句