awk中两个数字相加的函数

awk中两个数字相加的函数

我有一个 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 中,您可以通过数组访问它们(尽管它们需要以空格分隔而不是逗号分隔)。$2BEGINARGV

其次,取消引用内部变量的语法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}'

相关内容