你的 hash bang 定义的脚本不是 shell 脚本,它是一个 awk 脚本。您不能在脚本中以 bash 方式执行此操作。
另外,您所做的:echo blah|awk ...
不是传递参数,而是将 echo 命令的输出通过管道传输到另一个命令。
您可以尝试以下方法:
echo "hello"|./foo.awk file -
或者
var="hello"
awk -v a="$var" -f foo.awk file
有了这个,你a
的 foo.awk 中有 var,你可以使用它。
如果你想做一些类似于 shell script accept $1 $2 vars 的事情,你可以写一个小的 shellscript 来包装你的 awk 东西。
编辑
不,我没有误会你。
让我们举个例子:
比方说,你x.awk
有:
{print $1}
如果你这样做:
echo "foo" | x.awk file
它与以下内容相同:
echo "foo"| awk '{print $1}' file
这里 awk 的输入是 only file
,你的 echo foo 没有意义。如果你这样做:
echo "foo"|awk '{print $1}' file -
or
echo "foo"|awk '{print $1}' - file
awk 需要两个输入(awk 的参数)一个是标准输入一个是文件,在你的 awk 脚本中你可以:
echo "foo"|awk 'NR==FNR{print $1;next}{print $1}' - file
这将首先foo
从您的回声中打印,然后file
当然这个示例中的 column1 没有任何实际工作,只需将它们全部打印出来。
您当然可以有两个以上的输入,并且不要检查 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”是第二个参数,你可以在你的 x.awk 中得到它ARGV[2]
echo "foo" |x.awk file1 file2 file2 -
现在是 ARGV[4] 案例。
我的意思是,你echo "foo"|..
将是 awk 的标准输入,它可以是 awk 的第一个或第 n 个“参数”/输入。取决于您放置-
(stdin)的位置。您必须在 awk 脚本中处理它。