我希望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
有人可以帮我解决这个问题吗?
答案 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