在awk中添加两个数字的函数

use*_*074 2 awk

我有一个add.awk包含函数的 awk 文件add(num1,num2)。我想从命令行获取输入。

#!/bin/awk -f
function add(num1,num2)
{
    print $num1 + $num2
}
BEGIN {
    add($1,$2)
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用以下命令执行文件 add.awk 时:

./add.awk 5,6
Run Code Online (Sandbox Code Playgroud)

它总是打印值 0。

我指定输入的方式有问题吗?

ste*_*ver 6

有几个问题,我觉得

首先,据我知道的命令行参数不作为$1$2内部BEGIN块。但是,至少在 GNU awk 中,您可以通过ARGV数组访问它们(尽管它们需要以空格分隔而不是逗号分隔)。

其次,取消引用内部变量的语法就是num1not $num1

所以你可以这样做

#!/usr/bin/awk -f
function add(num1,num2)
{
    print num1 + num2
}
BEGIN {
    add(ARGV[1],ARGV[2])
}
Run Code Online (Sandbox Code Playgroud)

然后将其称为

$ ./add.awk 5 6
11
Run Code Online (Sandbox Code Playgroud)

如果你真的想使用,./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
Run Code Online (Sandbox Code Playgroud)

  • `ARGV` 是 POSIX(基于 `nawk` _new_ (1985) `awk`,不能在 70 年代的 Solaris 的 `/bin/awk` 上工作,但可以在 `/usr/xpg4/bin/awk` 上工作` 以及其他系统上的所有其他 `awk`)。 (2认同)
  • @StéphaneChazelas 感谢您的澄清 - 您对这些事情的详细了解总是令人惊讶 (2认同)