使用awk创建和导出/导入变量?

below_avg_st

我有一个文件,其中每一行都是新的客户信息,例如

Pop corn, [email protected], 50, 200

我目前正在尝试查看是否有可能使用aawk/gawk script将每一列分配给一个变量,然后用管道将这些变量sed替换为模板?我将在bash脚本中同时运行awk / gawk和sed。我可以按照什么好的方法来完成这项工作?我正在尝试不使用grep,因为我正在尝试学习如何一起使用awk / gawk,sed和bash脚本,或者perl因为我还没有学过。

斯蒂芬·查泽拉斯(Stephane Chazelas)

在我看来,您最好执行以下操作:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章