5

これが私のawkステートメントのスニペットです。ステートメントにこれらの2つの変数を挿入しようとしていますが、評価されていません。誰かが私を正しい方向に向けることができますか?

ZONE=`date "+%Z %Y"`
DAY=`date "+%a"`

awk '{if (NR<2) {print "["$1, $2, $3"]"}}'

私はこれを試しています:

awk '{if (NR<2) {print "[" $DAY, $1, $2, $3, $ZONE "]"}}'

ここでのこのヒントは、私の問題を解決するのに役立ちました。

シェル変数を「'」で囲むことにより、awkから保護します(つまり、二重引用符-一重引用符-二重引用符)。

awk'{print "'" $ VAR1 "'"、 "'" $ VAR2 "'"}' input_file

4

3 に答える 3

16

-vオプションを使用できます。

ZONE=`date "+%Z %Y"`
DAY=`date "+%a"`
awk -vzone="$ZONE" -vday="$DAY" 'BEGIN { print zone, day }'
于 2012-04-07T15:31:16.510 に答える
1

これらの変数は、一重引用符で囲まれている場合は展開されません。awk式内で、最も外側の引用符とエスケープされた二重引用符に二重引用符を使用することを検討してください。

ただし、ここで推測しているのは、変数が埋め込まれているが評価されていない場所で使用した実際のコマンドが含まれていないように見えるためです。

将来、またはこの回答が役に立たない場合は、使用するコマンド、その出力、および予想されることの説明を含めることを検討してください。このように、あなたが何を意味するのかを理解するのがはるかに簡単になります。

于 2012-04-07T13:47:19.777 に答える
0

上記のyazuの答えが気に入りましたが、これをMaxOSX(BSD)環境で機能させるには、構文を微調整する必要がありました。

~ $ ZONE=`date "+%Z %Y"`
~ $ DAY=`date "+%a"`
~ $ awk -v zone="$ZONE" -v day="$DAY" 'BEGIN { print zone, day }'
CEST 2018 Wed
于 2018-05-09T15:40:32.650 に答える