如果我想一个参数传递给一个awk脚本文件,我该怎么办呢?
#!/usr/bin/awk -f
{print $1}
在这里,我想打印传递到由壳体,如脚本的第一个参数:
bash-prompt> echo "test" | ./myawkscript.awk hello
bash-prompt> hello
如果我想一个参数传递给一个awk脚本文件,我该怎么办呢?
#!/usr/bin/awk -f
{print $1}
在这里,我想打印传递到由壳体,如脚本的第一个参数:
bash-prompt> echo "test" | ./myawkscript.awk hello
bash-prompt> hello
您的散列砰定义脚本不是shell脚本,它是一个awk脚本。 你不能做到这一点在你的脚本中的bash的方式。
还有,你做了什么: 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脚本接受$ 1 $ 2瓦尔,你可以写一个小的shell脚本来包装你的awk的东西。
编辑
不,我没有误会你了。
让我们的例子:
比方说,你的x.awk
有:
{print $1}
如果你这样做:
echo "foo" | x.awk file
它是一样的:
echo "foo"| awk '{print $1}' file
这里awk的输入是唯一的file
,你的回音富就没有意义了。 如果你这样做:
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
从你的回音,然后从列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
那么你的“富”是第二ARG,你可以得到它在你的x.awk ARGV[2]
echo "foo" |x.awk file1 file2 file2 -
现在它是ARGV [4]的情况。
我的意思是,你的echo "foo"|..
将标准输入awk中,可以通过第一或第n个“说法”为AWK /输入。 取决于你在哪里放-
标准输入)。 你必须处理它在你的awk脚本。
在awk
$1
引用记录中的第一个字段不喜欢它的第一个参数确实在bash
。 您需要使用ARGV
这一点,看看这里的官方文字。
脚本:
#!/bin/awk -f
BEGIN{
print "AWK Script"
print ARGV[1]
}
演示:
$ ./script.awk "Passed in using ARGV"
AWK Script
Passed in using ARGV
您可以使用-v
作为一个命令行选项 ,以提供脚本变量:
假设我们有一个文件script.awk这样的:
BEGIN {print "I got the var:", my_var}
然后,我们运行它是这样的:
$ awk -v my_var="hello this is me" -f script.awk
I got the var: hello this is me