2009-12-01 99 views
6

变量我想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 

任何人可以帮助我这个?

+0

你已经收到了这个问题的答案从** ** paxdiablo这里:http://stackoverflow.com/questions/1825509/printing-variable-inside-awk/1825622#1825622 - 使用awk的变量传递功能 – 2009-12-01 21:48:01

+0

重复: http://stackoverflow.com/questions/1825509/printing-variable-inside-awk – 2009-12-01 21:48:13

回答

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 
+0

是的!就是这个 。! – 2009-12-02 06:42:15

14

首先,如果你想让他们像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}' 
10

不要忘记,你可以设置“AWK变量”关于命令

awk -v FOO=bar '...<AWK code that uses the AWK variable FOO>...' 
+0

ie: ### date | AWK -v USER = $ USER '{印刷者 “:” $ 0}' ### RZR:星期六11月30日18时25分24秒CET 2013 ### – RzR 2013-11-30 17:24:05

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