AWK-将字符串作为命令执行?
此命令打印:AWK-将字符串作为命令执行?,awk,Awk,此命令打印: $ echo "123456789" | awk '{ print substr ($1,1,4) }' 1234 是否可以将字符串作为命令执行?例如,此命令: echo "123456789" | awk '{a="substr"; print a ($1,1,4) }' 结果: $ echo "123456789" | awk '{a="substr"; print a ($1,1,4) }' awk: {a="substr"; print a ($1,1,4) } awk
$ echo "123456789" | awk '{ print substr ($1,1,4) }'
1234
是否可以将字符串作为命令执行?例如,此命令:
echo "123456789" | awk '{a="substr"; print a ($1,1,4) }'
结果:
$ echo "123456789" | awk '{a="substr"; print a ($1,1,4) }'
awk: {a="substr"; print a ($1,1,4) }
awk: ^ syntax error
编辑:
$ cat tst.awk
function my_substr(x,y,z) { return substr(x,y,z) }
{ a="my_substr"; print @a($1,1,4) }
bolek@bolek-desktop:~/Pulpit$ echo "123456789" | gawk -f tst.awk
gawk: tst.awk:3: { a="my_substr"; print @a($1,1,4) }
gawk: tst.awk:3: ^ nieprawidłowy znak '@' w wyrażeniu
bolek@bolek-desktop:~/Pulpit$
我不认为直接在awk中实现这一点是可能的,但是使用shell可以获得类似的效果。回想一下,awk程序是以字符串的形式给出的,字符串在shell中是通过相邻写入来连接的。因此,您可以这样做:
a=substr
echo "123456789" | awk '{ print '"$a"'($1, 1, 4) }'
导致
1234
我认为在awk中不可能直接这样做,但是使用shell可以获得类似的效果。回想一下,awk程序是以字符串的形式给出的,字符串在shell中是通过相邻写入来连接的。因此,您可以这样做:
a=substr
echo "123456789" | awk '{ print '"$a"'($1, 1, 4) }'
导致
1234
您可以使用间接函数调用通过GNU awk中的变量调用用户定义的函数,请参阅
不幸的是,由于内部实现问题,如果希望以这种方式调用内置函数,则需要为每个函数编写一个包装器:
$ cat tst.awk
function my_substr(x,y,z) { return substr(x,y,z) }
{ a="my_substr"; print @a($1,1,4) }
$ echo "123456789" | gawk -f tst.awk
1234
您可以使用间接函数调用通过GNU awk中的变量调用用户定义的函数,请参阅 不幸的是,由于内部实现问题,如果希望以这种方式调用内置函数,则需要为每个函数编写一个包装器:
$ cat tst.awk
function my_substr(x,y,z) { return substr(x,y,z) }
{ a="my_substr"; print @a($1,1,4) }
$ echo "123456789" | gawk -f tst.awk
1234
您知道POSIX awk有类似的功能吗?不,POSIX awk没有类似的功能。@Ed Morton,最后一个示例不起作用。你可以再查一遍吗?谢谢。当我第一次复制/粘贴命令时,无需再次检查。如果你告诉我们它在什么方面对你“不起作用”,也许我们可以帮助你。你可能正在使用一个旧版本的gawk。gawk——版本告诉你什么?我使用的是4.0.0。你知道POSIX awk有类似的功能吗?没有,POSIX awk没有类似的功能。@Ed Morton,最后一个示例不起作用。你可以再查一遍吗?谢谢。当我第一次复制/粘贴命令时,无需再次检查。如果你告诉我们它在什么方面对你“不起作用”,也许我们可以帮助你。你可能正在使用一个旧版本的gawk。gawk——版本告诉你什么?我使用的是4.0.0。定义一个泛型函数,比如说,迭代数组的所有元素,并对每个元素执行一些操作X,其中X随调用而变化,并且能够为X指定函数名,这是一件非常常见的事情,这样可以避免编写一系列“if”或switch语句(gawk)定义一个泛型函数是一件非常常见的事情,比如说,迭代数组的所有元素,并对每个元素执行一些操作X,其中X随调用而变化,并且能够为X指定函数名可以避免编写一系列“if”或switch语句(gawk)。