如何在awk中打​​印变量

时间:2009-12-01 21:32:11

标签: bash scripting awk

我希望awk按如下方式解释变量

#!/bin/bash

file=tau
f=2.54
order=even

awk '{sum+=$2}; END {print '${file}_${f}_${order}_v1.xls', sum/NR}'
${file}_${f}_${order}_v1.xls >> safe/P-state-summary.xls

我想要所需的输出如下 -

tau_2.54_even_v1.xls   sum/NR

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:14)

首先,如果您希望在export等子进程的环境中传递它们,则需要awk个环境变量。

其次,您可以使用ENVIRON["name"]awk中获取环境变量。所以以下内容对我有用:

#!/bin/bash

export file=tau
export f=2.54
export order=even

awk '{sum+=$2}; END {print ENVIRON["file"] "_" ENVIRON["f"] "_" ENVIRON["order"] "_v1.xls", sum/NR}'

答案 1 :(得分:10)

不要忘记您可以在命令行

上设置“AWK变量”
awk -v FOO=bar '...<AWK code that uses the AWK variable FOO>...'

答案 2 :(得分:8)

我认为这就是你想要的:

#!/bin/bash

file=tau
f=2.54
order=even

awk "{sum+=\$2}; END {print \"${file}_${f}_${order}_v1.xls\", sum/NR}" \
  ${file}_${f}_${order}_v1.xls >> safe/P-state-summary.xls

答案 3 :(得分:0)

我使用上述解决方案的混合物并使用此

printf "\n${file}_${f}_${order}_v1.xls  " >> Safe/P-state-summary.xls
awk '{sum+=$3}; END  {print sum/NR}' ${file}_${f}_${order}_v1.xls >> Safe/P-state-summary.xls