在Awk中,如何使用字符串名称调用函数?

时间:2015-10-25 23:38:45

标签: awk gawk

我正在寻找一种通过名称调用awk函数的方法,即使用用户输入的字符串。

我的目标是替换像这样的很多代码......

if (text == "a") a(x)
if (text == "b") b(x)
if (text == "c") c(x)

...通过使用类似这样的字符串名称以任何方式分派给函数:

send(text, x)

在其他语言中,这种效果有时被描述为反射,消息发送或动态调度,或者按名称获取函数指针。

我正在寻找使用gawk执行此操作的方法,理想情况下还使用POSIX portable awk

2 个答案:

答案 0 :(得分:8)

将GNU awk 4.0或更高版本用于Indirect Function Calls

$ cat tst.awk
function foo() { print "foo() called" }
function bar() { print "bar() called" }

BEGIN {
    var = "foo"
    @var()

    var = "bar"
    @var()
}

$ awk -f tst.awk
foo() called
bar() called

答案 1 :(得分:2)

#!/usr/bin/awk -f
func alpha() {
  print "bravo"
}
BEGIN {
  charlie = "alpha"
  @charlie()
}

输出:

bravo

GNU awk - Git Repositories