【问题标题】:How to pass shell variables to awk in ksh shell script?如何在 ksh shell 脚本中将 shell 变量传递给 awk?
【发布时间】:2015-02-24 00:18:02
【问题描述】:

我想知道如何将 shell 变量传递给 awk..请有人帮忙。

m=10 // 这里是 shell 变量

awk -F, -v outfile="$outfile" '
    {
    printf("%14s Code %s %7s  %\047.2f\n"," ", $1," ",$2) >> outfile
    r[NR] = $1
    c[NR] = $3
   }
  END {printf("%14s Total Amount %7s %d \n "," "," ",$m) >> outfile

  }' trancumt.txt

请告诉我我们有没有办法做到这一点..

【问题讨论】:

  • -v outfile="$outfile" 是什么意思?
  • -v 选项设置一个 awk 变量(在本例中为 outfile)。
  • 我期待 OP 的回答,但是为什么不另外传递 -v m="$m" ???
  • 如果他将其更改为使用 -v 选项,则 "$m" 中的 "$" 将消失。
  • awk -F, -v outfile="$outfile", -v m="$m" ' 我在发布之前做了这个...没用

标签: shell awk ksh


【解决方案1】:

您可以使用选项-v 多次将多个变量从shell 传递给awk。正确的命令是:

awk -F, -v outfile="$outfile" -v m="$m" '<awk commands>'

检查以下示例,看看它是否有效:

m="10"
outfile="foo.bar"
awk -v m="$m" -v outfile="$outfile" 'BEGIN{print m, outfile; exit}'

输出:

10 foo.bar

【讨论】:

  • 如何打印 hek.. 它的说法 m: command not found... m = 10 awk -F, -v outfile="$outfile" -v m="$m" ' 并打印像这样.. printf("%14s Total Amount %7s %d \n "," "," ",$m)
  • 非常感谢..我之前有空间它阻止了我..现在它可以工作了
【解决方案2】:

稍微改变字符串以允许替换:

END {printf("%14s Total Amount %7s %d \n "," "," ",$m) >> outfile

END {printf("%14s Total Amount %7s %d \n "," "," ",'$m') >> outfile

或者(参见 cmets),将行更改为

END {printf("%14s Total Amount %7s %d \n "," "," ",m) >> outfile

添加选项时

-v m=$m

【讨论】: