最近では、テキスト処理のためにAWKを学んでいます。しかし、私はAWK構文について非常に混乱しています。 Wikipediaでは、構文が次の形式に従うことを読みました。
(conditions) {actions}
BEGINブロックとENDブロックで同じ構文に従うことができるとします。ただし、次のスクリプトを実行すると構文エラーが発生します。
awk 'BEGIN{}
(1 == 1) {print "hello";}
END{
(1==1) {print "ended"}}' $1
ただし、ENDブロック内でいくつかの変更を加え、条件の前に「if」を追加すると正しく機能します。
awk 'BEGIN{}
(1 == 1) {print "hello";}
END{
if (1==1) {print "ended"}}' $1
なぜ「if」をENDブロックに書き込むのですか?
ベストアンサー1
AWKプログラムは一連の規則であり、関数でもあります。ルールは次のように定義されます。模様((conditions)
あなたの形式で)次に行動;どちらもオプションです。
BEGIN
そしてEND
特別なパターン。
したがって、
BEGIN {}
(1 == 1) { print "hello"; }
END { if (1 == 1) { print "ended" } }
パターンはBEGIN
、(1 == 1)
(括弧は必要ありません)とですEND
。
パターンに続く中括弧内のブロック(またはすべてに一致するパターンなし)は次のとおりです。行動。このようなパターンを書くことはできません~へそれぞれを導入したパターンによって制御されるブロックです。ジョブ内の条件は、if
ステートメント(または他の条件ステートメントwhile
など)の一部として指定する必要があります。
上記のアクションは{}
(空のアクション)、、{ print "hello"; }
です{ if (1 == 1) { print "ended" } }
。
次のブロックは{ (1 == 1) { print "ended" } }
構文エラーを発生させます。なぜなら、(1 == 1)
ここにステートメントがあり、何らかの方法で次のステートメントから分離する必要があるからです。{ 1 == 1; { print "ended" } }
有効ですが、目的の効果を得ることはできません。1 == 1
評価された後、別途{ print "ended" }
。