AWK - 入力レコードの代わりに変数から列を選択する

AWK - 入力レコードの代わりに変数から列を選択する

複雑なプロシージャを含むAWKプログラムファイルがあるとしましょう。例.awk。現在のレコードの行全体ではなく、特定の列に変数を割り当てようとしています。

#!/usr/bin/awk -f

BEGIN {...}
... {...}
...
END {
    ...
    var1 = ... # do something
    print "var1 ... " var1

    var2 = ⬛⬛⬛⬛⬛⬛
    print "var2 ... " var2
}

var1ファイル入力とは何の関係もありません。シェルで次のプログラムを実行します。

awk -f ./example.awk ./text.txt
...
var1 ... I like chocolate cake
var2 ... chocolate

この例に示すように、文字var2列は3番目のフィールド/列です。 UNIX シェルでは、次のようになります。

var2=$(cut -d ' ' -f 3 <<< "$var1")

var2AWKでスクリプトを作成するにはどうすればよいですか?

答え1

awk -v f=3 '
  END {
    var1 = "I like chocolate cake"
    n = split(var1, a)
    var2 = a[f]
    print var1
    print var2
  }
' /dev/null
I like chocolate cake
chocolate

関連情報