Как напечатать переменную внутри awk - PullRequest
6 голосов
/ 02 декабря 2009

Я хочу, чтобы 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

Кто-нибудь может мне помочь с этим?

Ответы [ 4 ]

14 голосов
/ 02 декабря 2009

Во-первых, вам нужно export переменные среды, если вы хотите, чтобы они передавались в среде дочернего процесса, такого как awk.

Во-вторых, вы можете использовать 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 голосов
/ 02 декабря 2009

Не забывайте, что вы можете установить «переменные AWK» в командной строке

awk -v FOO=bar '...<AWK code that uses the AWK variable FOO>...'
8 голосов
/ 02 декабря 2009

Я думаю, это то, что вы хотите:

#!/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 голосов
/ 02 декабря 2009

Ну, я использовал смесь вышеуказанных растворов и заставил ее работать с этим

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...