2009-12-01 13 views
6

Quiero que el awk para interpretar la variable de la siguientecómo imprimir variable dentro de 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 

Quiero que la salida deseada -

tau_2.54_even_v1.xls sum/NR 

Puede alguien ayudarme con esto?

+0

que ya ha recibido una respuesta a esta pregunta desde ** ** paxdiablo aquí: http://stackoverflow.com/questions/1825509/printing-variable-inside-awk/1825622#1825622 - variable de paso el uso de awk característica –

+0

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

Respuesta

8

creo que esto es lo que quiere:

#!/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í! eso es todo .! –

14

En primer lugar, es necesario export variables de entorno si quiere que se pasa en el entorno de un proceso hijo como awk.

En segundo lugar, puede usar ENVIRON["name"] para obtener una variable de entorno en awk. Por lo que las siguientes obras para mí:

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

No se olvide que puede establecer "variables" en la línea de comandos de AWK

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

ie: ### fecha | awk -v USUARIO = $ USER '{usuario de impresión ":" $ 0}' ### RZR: Sab Nov 30 de 2013 18:25:24 CET ### – RzR

0

Bueno, yo utilicé una mezcla de las soluciones anteriores y lo consiguió trabajar con este

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 
Cuestiones relacionadas