awk передает переменную

Я борюсь с проблемой awk в моем сценарии оболочки bash. В приведенном ниже фрагменте кода я передаю переменную var_awk для регулярного выражения в awk. Идея состоит в том, чтобы получить строки над регулярным выражением, но приведенное ниже эхо не отображает никаких данных.

echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'`

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

if [ $GE == "HBCA" ] || [ $GE == "HBUS" ] || [ $GE == "HBEU" ]; then
        for f in `ls -ltr $date*GEN*REVAL*log|grep -v LPD | awk '{split($9,a,"_")}{print a[3]}'`; do
                echo $f
                var_awk="$date"_RESET_CALC_"$f"
                echo $var_awk
                echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'`

person user3341078    schedule 22.02.2014    source источник
comment
Как правило, вы должны использовать нотацию $(…) вместо обратных кавычек вокруг команд.   -  person Jonathan Leffler    schedule 22.02.2014


Ответы (2)


Вы не можете использовать переменную в регулярном выражении таким образом. Вам нужно сделать:

/usr/xpg4/bin/awk -v reg="$var_awk" '$0~reg{ print $0 }'

или просто

/usr/xpg4/bin/awk -v reg="$var_awk" '$0~reg'
  • Внутри / / ваша переменная reg будет использоваться как буквальное слово.
  • Укажите свои переменные оболочки.
person jaypal singh    schedule 22.02.2014

попробуй это:

...whatever you had already..|awk -v reg="$var_awk" '$0~reg'
  • лучше заключить переменную оболочки в кавычки, например. если в вашем var есть пробелы.
  • /pattern/ в awk называется константой регулярного выражения. Его нельзя использовать с переменной, поэтому он называется constant. В этом примере нам нужно использовать динамическое регулярное выражение.
person Kent    schedule 22.02.2014
comment
Огромное спасибо, ребята. скалы переполнения стека. Моя проблема решена. Было приятно узнать, что // для литералов, а не для переменных. - person user3341078; 22.02.2014
comment
@ user3341078 Рад, что ваша проблема решена. Здесь на SO можно поблагодарить, нажав на галочку рядом с ответом. - person jaypal singh; 22.02.2014