AWK - 作为命令执行字符串?

Ted*_*345 1 awk

该命令打印:

\n\n
$ echo "123456789" | awk \'{ print substr ($1,1,4) }\'\n1234\n
Run Code Online (Sandbox Code Playgroud)\n\n

是否可以将字符串作为命令执行?例如,这个命令:

\n\n
echo "123456789" | awk \'{a="substr"; print a ($1,1,4) }\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果:

\n\n
$ echo "123456789" | awk \'{a="substr"; print a ($1,1,4) }\'\nawk: {a="substr"; print a ($1,1,4) }\nawk:                               ^ syntax error\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:

\n\n
$ cat tst.awk \nfunction my_substr(x,y,z) { return substr(x,y,z) }\n\n{ a="my_substr"; print @a($1,1,4) }\nbolek@bolek-desktop:~/Pulpit$ echo "123456789" | gawk -f tst.awk\ngawk: tst.awk:3: { a="my_substr"; print @a($1,1,4) }\ngawk: tst.awk:3:                        ^ nieprawid\xc5\x82owy znak \'@\' w wyra\xc5\xbceniu\nbolek@bolek-desktop:~/Pulpit$ \n
Run Code Online (Sandbox Code Playgroud)\n

Mic*_*ber 5

我认为直接在 awk 中不可能做到这一点,但您可以通过使用 shell 获得类似的效果。回想一下,awk 程序是以字符串形式给出的,在 shell 中,字符串只需将它们并排书写即可连接起来。因此,您可以这样做:

a=substr
echo "123456789" | awk '{ print '"$a"'($1, 1, 4) }'
Run Code Online (Sandbox Code Playgroud)

导致1234