linux – 将参数传递给awk脚本文件

如果我想将一个参数传递给一个awk脚本文件,那我该怎么办?

#!/usr/bin/awk -f

{print $1}

这里我想打印从shell传递给脚本的第一个参数,如:

bash-prompt> echo "test" | ./myawkscript.awk hello
bash-prompt> hello
你的哈希bang定义脚本不是shell脚本,它是一个awk脚本。你不能在你的脚本中以bash的方式做到这一点。

还有,你做了什么:echo blah | awk …没有传递参数,它将echo命令的输出管道到另一个命令。

您可以尝试以下方式:

 echo "hello"|./foo.awk file -

要么

var="hello"
awk -v a="$var" -f foo.awk file

这样,你的foo.awk中有var a,你可以使用它。

如果你想做一些像shell脚本一样接受$ 1 $ 2 vars,你可以写一个小的shellscript来包装你的awk的东西。

编辑

不,我没有误会你。

举个例子:

假设你的x.awk有:

{print $1}

如果你这样做:

echo "foo" | x.awk file

它是一样的:

echo "foo"| awk '{print $1}' file

这里awk的输入只是文件,你的回声foo没有意义。如果你这样做:

  echo "foo"|awk '{print $1}' file -
or
    echo "foo"|awk '{print $1}' - file

awk需要两个输入(awk的参数),一个是stdin一个是文件,在你的awk脚本中你可以:

echo "foo"|awk 'NR==FNR{print $1;next}{print $1}' - file

这将从您的回声中打印第一个foo,然后从文件列表1当然这个例子什么也没有实际工作,只需打印它们。

你当然可以有两个以上的输入,不要检查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”是第二个参数,你可以通过ARGV [2]得到它的x.awk

echo "foo" |x.awk file1 file2 file2 -

现在是ARGV [4]案例。

我的意思是,你的回声“foo”| ..将是标记为awk,它可以通过第1或第n个“参数”/输入awk。取决于你放在哪里 – (stdin)。你必须在你的awk脚本中处理它。

http://stackoverflow.com/questions/15969861/pass-parameter-to-an-awk-script-file

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:linux – 将参数传递给awk脚本文件