[CLOSED] [shell - awk] передать shell переменную в тело awk-у

macrophage

Чет никак не получается скормить awk-у shell переменную.
На простом примере:
 
 cat /etc/passwd | awk -F':' '{if ($1 == "<my_name>") print $0}' 

Возвращает строку из /etc/passwd с первым полем равным <my_name>.
Хочу вместо <my_name> вставить шеловскую переменную, но чет никак не могу понять как ее туда впихнуть :confused:
Так, ясен пень, работает:
 
 Z="cat /etc/passwd | awk -F':' '{if (\$1 == \"${LOGNAME}\") print \$0}'" ; eval $Z  

, но имхо изврат, тем более, что этот пример простой, а в более сложном задолбаюсь экранировать...
Ведь наверняка можно передать? никто не сталкивался?

vall

awk -v logname=${LOGNAME} 'BEGIN { print logname ENVIRON["LOGNAME"]}'
awk -v login=${LOGNAME} -F: '$1 == login { print }' /etc/passwd
grep "^${LOGNAME}:" /etc/passwd

banderon

А так работает?
cat /etc/passwd | awk -F':' '{if ($1 == "'"${LOGNAME}"'") print $0}'

macrophage

круто, спасибо!
сразу 2 способа =)
PS
ENVIRON[] тема =)

macrophage

А так работает?
code:cat /etc/passwd | awk -F':' '{if ($1 == "'"${LOGNAME}"'") print $0}'
работает.. я туда как только не пробовал впихнуть ее.. экранировал по всякому.. даже echo пытался воткнуть.. не получалось... а вот так, по всей видимости не пробовал, блин =)
спасибо!

macrophage

grep "^${LOGNAME}:" /etc/passwd
задача не вывести из /etc/passwd свою строку... это так, пример, чтоб нагляднее было...
задача была научиться использовать переменные окружения в awk-е
Спасибо!

margadon

awk "{print $blablabla}" - распечатает скриптовый $blablabla
awk "{print \$1}" - распечатает первое слово из входа awk-а
вроде бы не очень много нужно экранировать :)
Оставить комментарий
Имя или ник:
Комментарий: