Ответ 1
ваш хэш-бит определяет, что script не является оболочкой script, это awk script. вы не можете сделать это с помощью bash в script.
то, что вы сделали: echo blah|awk ...
не, проходящий через paramenter, он передает вывод команды echo другой команде.
вы можете попробовать следующее:
echo "hello"|./foo.awk file -
или
var="hello"
awk -v a="$var" -f foo.awk file
с этим, у вас есть var a
в вашем foo.awk, вы можете использовать его.
если вы хотите сделать что-то вроде shell script принять $1 $2 vars, вы можете написать небольшой shellscript, чтобы обернуть ваш материал awk.
ИЗМЕНИТЬ
Нет, я не понял вас неправильно.
возьмем пример:
скажем, ваш x.awk
имеет:
{print $1}
если вы выполните:
echo "foo" | x.awk file
это то же самое, что:
echo "foo"| awk '{print $1}' file
здесь вход для awk - это только file
, ваше эхо-foo не имеет смысла. если вы это сделаете:
echo "foo"|awk '{print $1}' file -
or
echo "foo"|awk '{print $1}' - file
awk принимает два ввода (аргументы для awk), один из них - stdin one - это файл, в вашем awk script вы могли:
echo "foo"|awk 'NR==FNR{print $1;next}{print $1}' - file
это выведет первый foo
из вашего эха, тогда столбец1 из file
, конечно, этот пример не делает никакой фактической работы, просто распечатайте все.
вы можете, конечно, иметь более двух входов и не проверять NR и FNR, вы можете использовать
ARGC The number of elements in the ARGV array.
ARGV An array of command line arguments, excluding options and the program argument, numbered from zero to ARGC-1
например:
echo "foo"|./x.awk file1 - file2
то ваш "foo" является вторым аргументом arg, вы можете получить его в x.awk на ARGV[2]
echo "foo" |x.awk file1 file2 file2 -
теперь это случай ARGV [4].
Я имею в виду, что ваш echo "foo"|..
будет stdin для awk, это может быть 1-го или n-го "аргумента" /ввода для awk. зависит от того, где вы помещаете -
(stdin). Вы должны обработать его в своем awk script.