Вопрос: вставка переменных в мой оператор awk


Вот фрагмент моего утверждения awk. Я пытаюсь вставить эти 2 переменные в оператор, но они не получают оценку. Может ли кто-нибудь указать мне в правильном направлении?

ZONE=`date "+%Z %Y"`
DAY=`date "+%a"`

awk '{if (NR<2) {print "["$1, $2, $3"]"}}'

Я пробую это:

awk '{if (NR<2) {print "[" $DAY, $1, $2, $3, $ZONE "]"}}'

Этот совет помог решить мою проблему.

Защитите переменные оболочки из awk, включив их в «'» (т. Е. Двойная кавычка - одинарная кавычка - двойная кавычка).

awk '{print "'" $ VAR1 "'", "'" $ VAR2 "'"}' input_file


3


источник


Ответы:


Вы можете использовать опцию -v:

ZONE=`date "+%Z %Y"`
DAY=`date "+%a"`
awk -vzone="$ZONE" -vday="$DAY" 'BEGIN { print zone, day }'

13



Эти переменные не будут расширены, если они заключены в одинарные кавычки. Рассмотрите возможность использования двойных кавычек для ваших внешних котировок и двойных кавычек в вашем выражении awk.

Я только угадываю здесь, однако, поскольку вы, кажется, не включили фактическую команду, которую вы использовали, когда ваши переменные были встроены, но не оцениваются.

В будущем, или если этот ответ не поможет, подумайте о включении команды, которую вы используете, а также о ее выходе и объяснении того, что вы ожидали. Таким образом, будет намного легче понять, что вы имеете в виду.


0



Мне понравился ответ yazu выше, хотя для того, чтобы заставить его работать в моей среде MaxOSX (BSD), мне пришлось настроить синтаксис:

~ $ ZONE=`date "+%Z %Y"`
~ $ DAY=`date "+%a"`
~ $ awk -v zone="$ZONE" -v day="$DAY" 'BEGIN { print zone, day }'
CEST 2018 Wed

0