3

Я хочу иметь возможность вызывать сценарий оболочки, содержащий следующую команду.

awk -F $'\xE7' '{OFS ="¬"} { $3 = sprintf("%010s". $3) ; print $0 }' > outputfile

Но я хочу иметь возможность передать переменную сценария оболочки в эту команду, которая будет использоваться для замены $3 в команде AWK.

Как передать переменную сценария оболочки в эту команду AWK?

3 ответа3

5

Правильный способ сделать это - использовать функцию передачи переменных AWK. Кроме того, вам, вероятно, нужно установить OFS только один раз, поэтому вы должны сделать это в предложении BEGIN .

awk -F $'\xE7' -v awkvar="$shellvar" 'BEGIN {OFS ="¬"} { $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile

Вы также можете использовать -v для установки OFS:

awk -F $'\xE7' -v awkvar="$shellvar" -v OFS ="¬" '{ $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile

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

2

У awk есть массив ENVIRON для доступа к среде:

$ FOO=bar awk 'BEGIN{print ENVIRON["FOO"]}'
bar
-1

Одинарные кавычки препятствуют расширению. Включите их.

awk ... '...'"$foo"'...' ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .