0

次のように awk スクリプト内でシェル スクリプト変数を使用できることに気付きました。

var="help"
awk 'BEGIN{print "'$var'" }'

varawk の外部の値を保持しながら awkの内部の値を変更する方法を教えてもらえますか?

awk内でシェルスクリプトの変数にアクセスするのと同じように、awk内でシェル配列にアクセスできますか? もしそうなら、どのように?

4

2 に答える 2

1

それは無理だ; あなたが持っている唯一のバリアント:

  • コマンド置換を使用awkし、出力を変数に書き込みます。
  • データをファイルに書き込み、外側のシェルから読み取ります。
  • シェル出力を生成し、それを で実行しevalます。

例。

コマンド置換、1 つの変数:

$ export A=10
$ A=$(awk 'END {print 2*ENVIRON["A"]}' < /dev/null)
$ echo $A
20

ここでは、A を 2 で乗算し、乗算の結果を書き戻します。

eval; 2 つの変数:

$ A=10
$ B=10
$ eval $(awk 'END {print "A="2*ENVIRON["A"]"; B="2*ENVIRON["B"]}' < /dev/null)
$ echo $A
20
$ echo $B
20
$ awk 'END {print "A="2*ENVIRON["A"]"; B="2*ENVIRON["B"]}' < /dev/null
A=40; B=40
于 2012-07-11T21:41:15.623 に答える
0

ファイル仲介を使用しますが、機能します。

var="hello world"
cat > /tmp/my_script.awk.$$ <<EOF
BEGIN { print \"$var\" }
EOF
awk /tmp/my_script.awk.$$
rm -f /tmp/my_script.awk.$$

これはシェルのhere document機能を使用しています。ヒアドキュメント内の補間に関するルールについては、シェルのマニュアルを確認してください。

于 2012-07-11T22:00:59.350 に答える