如何在awk中打印变量

7
我希望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

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

您已经从 paxdiablo 这里收到了一个关于此问题的答案:http://stackoverflow.com/questions/1825509/printing-variable-inside-awk/1825622#1825622 - 使用awk的变量传递功能。 - Dennis Williamson
1
请输出awk内的变量 - glenn jackman
4个回答

18

首先,如果您希望将环境变量传递给像awk这样的子进程,您需要使用export导出环境变量。

其次,您可以使用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}'

11
不要忘记你可以在命令行上设置“AWK变量”。
awk -v FOO=bar '...<AWK code that uses the AWK variable FOO>...'

日期 | awk -v USER=$USER '{ print USER ":" $0 }'rzr:2013年11月30日中欧标准时间下午6:25:24 - RzR

9
我想这是你想要的内容:

我认为这是你想要的:

#!/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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接