2014-01-25 3 views
1

Я хотел бы выполнить следующий сценарий AWK (который работает хорошо) в Tcl:TCL глобальные переменные внутри ехес команды AWK

exec awk {$1=="text" {print $0}} temp1.txt > temp2.txt} 

НО проблема в том, что «текст» является пришедшей от ОК входа виджета и я должен поместить его в переменную ($ вар), который не распознается AWK:

set var [.entry get] 
exec awk {$1==$var {print $0}} temp1.txt > temp2.txt} 

Любая идея, как пропустить его или сделать это работает?

PS Я хотел бы остаться с awk, чтобы не менять код на tcl, если это возможно.

С уважением, Лукаса

+0

Я не работал с AWK около двадцати лет: вам не нужны кавычки второй операнд выражения ==? –

+0

Кроме того, фигурные скобки не сбалансированы в вашем примере: вы имели в виду 'exec awk {$ 1 == $ var {print $ 0}} temp1.txt> temp2.txt'? –

+0

О! Не заметил ваш первый пример. Кажется, что котировки _are_ необходимы в конце концов. См. Мой ответ ниже. –

ответ

4

Используйте -v переключатель в AWK передать внешнюю переменную AWK:

exec awk -v var=$var {$1==var {print $0}} temp1.txt > temp2.txt} 
+1

Это элегантно, и будет хорошо работать с любым не двоичным, не секретным значением. (Sucks для паролей/секретных ключей, но это в общем случае так или иначе, а бинарные данные лучше всего обрабатываются с помощью других инструментов ...) –

+0

Правда, awk не сможет выполнять какие-либо сопоставления строк для двоичных данных в любом случае. – anubhava

Смежные вопросы