2009-12-01 3 views
6

Voglio che l'awk di interpretare la variabile come segueCome stampare variabile all'interno 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 

voglio l'uscita desiderata come segue -

tau_2.54_even_v1.xls sum/NR 

Qualcuno può aiutarmi con questo?

+0

È già ricevuto una risposta a questa domanda da ** ** paxdiablo qui: http://stackoverflow.com/questions/1825509/printing-variable-inside-awk/1825622#1825622 - passaggio variabile uso di awk caratteristica –

+0

Duplicato: http://stackoverflow.com/questions/1825509/printing-variable-inside-awk –

risposta

8

penso che questo è ciò che si vuole:

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

Sì! questo è .! –

14

In primo luogo, è necessario export variabili d'ambiente, se si desidera loro di essere passati in un ambiente di un processo figlio come awk.

In secondo luogo, è possibile utilizzare ENVIRON["name"] per ottenere una variabile di ambiente in awk. Così le seguenti opere per me:

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

Non dimenticate che è possibile impostare "variabili di AWK" a riga di comando

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

ie: ### data | awk -v USER = $ USER '{USER print ":" $ 0}' ### rzr: Sab 30 Nov 18:25:24 CET 2013 ### – RzR

0

Beh io ho usato una miscela di soluzioni di cui sopra e ottenuto che funziona con questo

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