2009-12-01 3 views
6

Tôi muốn awk để giải thích các biến như sauLàm thế nào để in biến bên 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 

Tôi muốn đầu ra mong muốn như sau -

tau_2.54_even_v1.xls sum/NR 

Ai có thể giúp tôi ra với điều này?

+0

Bạn đã nhận được một câu trả lời cho câu hỏi này từ ** paxdiablo ** ở đây: http://stackoverflow.com/questions/1825509/printing-variable-inside-awk/1825622#1825622 - qua biến sử dụng awk của tính năng –

+0

Trùng lặp: http://stackoverflow.com/questions/1825509/printing-variable-inside-awk –

Trả lời

8

Tôi nghĩ rằng đây là những gì bạn muốn:

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

Có! đây chính là nó .! –

14

Trước tiên, bạn cần phải export biến môi trường nếu bạn muốn họ được thông qua trong môi trường của một quá trình con như awk.

Thứ hai, bạn có thể sử dụng ENVIRON["name"] để nhận biến môi trường trong awk. Vì vậy, các công trình sau đây cho tôi:

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

Đừng quên rằng bạn có thể đặt "AWK biến" trên dòng lệnh

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

tức là: ### ngày | awk -v USER = $ USER '{print USER ":" $ 0}' ### rzr: Sat Nov 30 18:25:24 CET 2013 ### – RzR

0

Vâng tôi đã sử dụng một hỗn hợp của các giải pháp trên và nhận nó làm việc với điều này

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