2009-12-01 14 views
6

chcę awk interpretowania zmienną następującoJak drukować zmienną wewnątrz 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 

Chcę pożądany wynik następująco -

tau_2.54_even_v1.xls sum/NR 

Czy ktoś może mi pomóc z tym?

+0

już otrzymał odpowiedź na to pytanie od ** paxdiablo ** tutaj: http://stackoverflow.com/questions/1825509/printing-variable-inside-awk/1825622#1825622 - zmienna odejście stosować awk za funkcja –

+0

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

Odpowiedz

8

myślę, że to, co chcesz:

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

Tak! to jest to .! –

14

Po pierwsze, trzeba export zmiennych środowiskowych, jeśli chcesz, żeby być przekazywane w środowisku procesu jak dziecko awk.

Po drugie, można użyć ENVIRON["name"], aby uzyskać zmienną środowiskową w awk. A zatem następujące prace dla mnie:

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

nie należy zapominać, że można ustawić „zmienne awk” na poleceń

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

tj .: ### data | awk -v USER = $ USER '{print USER ":" $ 0}' ### rzr: sob 30 listopada 18:25:24 CET 2013 ### – RzR

0

Więc użyłem mieszanki powyższych rozwiązań, ale to działa w ten

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 
Powiązane problemy