2

こんにちは、コードを書いたように、awk の括弧 {} について非常に混乱しています。

{
   FNR == 3 { print $1 " age is " $2 }
}

しかし、外側のブラケットでエラーが発生しましたが、printステートメントの周りのブラケットでエラーが発生しませんでした。なぜそうなのですか:/次のコードでも

{
 s = $1
 d = $2
 no = $1 + $2
 {print no}
}

外側の括弧を削除すると、引数が表示され、LOC の回数が表示されるのはなぜですか? とても混乱しています。

4

1 に答える 1

3

awkスクリプトはコマンドで構成されています。各コマンドには、パターンとアクションがあります。

pattern1 { action1 }
pattern2 { action2 }

入力の各行について、awkは各パターンをテストし、パターンがtrueの場合に対応するアクションを実行します。

パターンは省略できます。その場合、パターンは常にtrueと見なされ、各行に対してアクションが実行されます。同様に、アクションは省略できます。その場合、アクションはprint;と見なされます。これにより、awkを使用して、行を変更せずに行を簡単に選択できます。

この構造を念頭に置いて、与えられた例を解釈することができます。最初のアクションは、すべての行に適用される単一のアクションです。しかし、アクションはうまく形成されていません---外側のブラケットを削除すると、それは明確なパターンとアクションになり、どちらも正しく構築されます。

2番目の例もすべての行に適用されます。行から最初の2つの(空白で区切られた)フィールドを取得し、それらを数値として追加して、結果を出力します。外側のブラケットを削除すると、対応するアクションのない3つのパターンと、パターンのないアクションが得られます。したがって、パターン---割り当ての値であり、通常はtrue---には、print通常呼び出される暗黙的なものがあります。同様に、アクションは常に呼び出され、の値を出力しnoます。

于 2011-10-06T07:09:34.853 に答える