URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7341
[ Назад ]

Исходное сообщение
"передать парамерт в awk"

Отправлено GHopper , 29-Апр-08 13:39 
Здравствуйте!

#!/bin/sh
iVal = 666;
ls -al | awk '{printf("%s - %d\n", $0, 666)}'

Не могу вместо 666 передать значение переменной iVal.
ls -al | awk '{printf("%s - %d\n", $0, $iVal)}' не работает.

Помогите решить проблемку. Я еще слаб в шеле...


Содержание

Сообщения в этом обсуждении
"передать парамерт в awk"
Отправлено phpcoder , 29-Апр-08 13:41 
>Здравствуйте!
>
>#!/bin/sh
>iVal = 666;
>ls -al | awk '{printf("%s - %d\n", $0, 666)}'
>
>Не могу вместо 666 передать значение переменной iVal.
>ls -al | awk '{printf("%s - %d\n", $0, $iVal)}' не работает.

awk -v iVal="666" '{...}'



"передать парамерт в awk"
Отправлено phpcoder , 29-Апр-08 13:43 
>>Здравствуйте!
>>
>>#!/bin/sh
>>iVal = 666;
>>ls -al | awk '{printf("%s - %d\n", $0, 666)}'
>>
>>Не могу вместо 666 передать значение переменной iVal.
>>ls -al | awk '{printf("%s - %d\n", $0, $iVal)}' не работает.

ls -al | awk -v iVal="666" '{printf("%s - %d\n", $0, iVal)}'



"передать парамерт в awk"
Отправлено angra , 01-Май-08 05:47 
В общем случае при одинарных кавычках шелл вообще никак не интерпретирует содержимое. При двойных происходит "интерполяция переменных", то есть вместо $что_нибудь, подставляется значение переменной что_нибудь. Проблема возникает при использовании perl, awk и других язвков в которых для переменных также используется $. Как один из вариантов использовать двойные кавычки вместе с экранированием при помощи \. Например так

iVal=666;ls -al | awk "{printf(\"%s - %d\n\",\$0, $iVal)}"


"передать параметр _из_ shell"
Отправлено Andrey Mitrofanov , 09-Июл-08 00:11 
>iVal=666;ls -al | awk "{printf(\"%s - %d\n\",\$0, $iVal)}"

Третий %) вариант: чтобы не заниматься "экранированием всего остального" -

iVal=666;ls -al | awk '{printf("%s - %d\n",$0, '$iVal')}'

В более общем случае (~ $iVal содержит пробелы) может потребоваться писать
'... ... ...'"$iVal"'... ... ...'

ps: Disclaimer: GNU/Linux, bash, gawk -- YMMV

pps: эээ... гм, :) кстати: '{$0=$0" - '$iVal'";print}'