2009-12-01 95 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