awk: переменная как искомый образец

kataich

Здравствуйте, у меня такая проблема.
Допустим я в "awk" - программе объвил некую переменную var=SomeString.
Хочу, чтобы теперь эта переменная играла роль образца, то есть что-то типа этого
/var/ {print("hello");}, но в таком виде, понятно, я буду искать вхождение не SomeString в записи, а просто var. Как мне добиться поиска SomeString?
Заранее благодарен

pitrik2

вбиваешь в гугл: awk variable
первая ссылка твоя

kataich

Большое спасибо!
Еще один мелкий вопрос, если можно.
Мне нужно не просто найти вхождение SomeString, а чтобы это было отдельное слово.
Я могу сделать так /\<SomeString\>/ {print("Hello")}, но сделать так
$0 ~ /\<var\>/ {print("Hello")} не получилось.

apl13

$0 ~ var {}

apl13

$0 ~ "\<" var "\>" {}

kataich

Спасибо.
Но, может, так
 $0 ~ "\\<" var "\\>" { 

У меня с одинарными слэшами воспринял их как экранирование и "\<" интерпретировал как "<"

apl13

Плюс-минус бэкслэш... :lol:

kataich

Прости, но я не понял, объясни, пожалуйста, почему тогда awk ругнулся так:
awk: cmd. line:7: warning: escape sequence `\<' treated as plain `<'

pitrik2

ворнинг это не ругань а предупреждение
ну типа он тебя предупредил на всякий случай чтобы ты имел ввиду что если хочешь \< то должен ставить

kataich

А разве не достаточно?

pitrik2

А разве не достаточно?
ну это же от шелла зависит
у когонить может ваще не надо ничего экранировать, а у когонить все надо
стандарта ж нет на такое

kataich

А разве эти строчки шелл обрабатывает?
Ну тогда, наверное, от awk может зависеть.
P.S. Кстати, можешь сказать какие-нибудь два не особо изощренных командных интерпретатора, чтобы с одинаковым количество бэкслешей выражение интерпретировалось по-разному. (например echo ...)

pitrik2

P.S. Кстати, можешь сказать какие-нибудь два не особо изощренных командных интерпретатора, чтобы с одинаковым количество бэкслешей выражение интерпретировалось по-разному. (например echo ...)

> bash
> echo "\\\<"
\\<
> sh
> echo "\\\<"
\<

kataich

У тебя какой пакет bash?
У меня на
bash-3.2-20.fc7 и на bash-3.1-16.1 такого не воспроизводится

pitrik2

У тебя какой пакет bash?

> bash --version
GNU bash, version 2.03.0(1)-release (sparc-sun-solaris)
Copyright 1998 Free Software Foundation, Inc.

подозреваю что дело необязательно в баше но и в конкретной реализации баша
ну тоесть баш на солярке и баш на редхате могут себя по-разному вести
и это абсолютно нормально в юникслайк системах

Dasar

и это абсолютно нормально в юникслайк системах
скорее - "абсолютно обычно", а не "абсолютно нормально"
Оставить комментарий
Имя или ник:
Комментарий: