我有一个 awk 文件add.awk
,其中包含一个函数add(num1,num2)
。我想从命令行获取输入。
#!/bin/awk -f
function add(num1,num2)
{
print $num1 + $num2
}
BEGIN {
add($1,$2)
}
但是当我尝试使用以下命令执行文件 add.awk 时:
./add.awk 5,6
它总是打印值 0。
我指定输入的方式有问题吗?
答案1
我认为有几个问题
首先,据我所知,命令行参数在块内$1
不可用。但是,至少在 GNU awk 中,您可以通过数组访问它们(尽管它们需要以空格分隔而不是逗号分隔)。$2
BEGIN
ARGV
其次,取消引用内部变量的语法num1
不是$num1
.
所以你可以做
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
add(ARGV[1],ARGV[2])
}
然后将其称为
$ ./add.awk 5 6
11
如果你真的想使用./add.awk 5,6
那么你需要ARGV[1]
在内部分成一个数组,例如
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
split(ARGV[1],a,",");
add(a[1],a[2])
}
$ ./add.awk 5,6
11
答案2
awk 正在从输入流中读取,但由于没有任何内容,因此它打印 0。
为了向脚本提供输入,您可以使用:
echo 5 6 | awk '{ print $1 + $2}'