1

このコマンドは次のように出力します。

$ 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$ 
4

2 に答える 2

4

間接関数呼び出しを使用して、GNU awk の変数を介してユーザー定義関数を呼び出すことができます。http: //www.gnu.org/software/gawk/manual/gawk.html#Indirect-Calls を参照してください。

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

BEGIN {
   the_func = "foo"
   @the_func()

   the_func = "bar"
   @the_func()
}
$ gawk -f tst.awk
foo() called
bar() called

残念ながら、内部実装の問題により、組み込み関数をそのように呼び出したい場合は、それぞれのラッパーを作成する必要があります。

$ 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
于 2012-12-06T13:18:54.373 に答える
4

awk で直接行うことはできないと思いますが、シェルを使用すると同様の効果が得られます。awk プログラムは文字列として与えられることを思い出してください。文字列は、シェル内で並べて記述するだけで連結されます。したがって、これを行うことができます:

a=substr
echo "123456789" | awk '{ print '"$a"'($1, 1, 4) }'

になり1234ます。

于 2012-12-06T12:33:48.530 に答える