4

awkは、式に一致するすべてのパターンに一致するようで、対応するアクションを実行します。関連付けることができる優先順位はありますか?

たとえば。以下では、#(コメント)で始まる行が両方のパターンで一致し、両方のアクションが実行されます。コメント行を最初のアクションのみに一致させたい。

/^#.*/  {
    // Action for lines starting with '#'
}


{
    // Action for other lines
}
4

3 に答える 3

7

すでに持っているコードをほとんどそのままにしておきたい場合は、awk 次のステートメントを使用できます。nextステートメントに遭遇するとawk、現在のレコードの処理をスキップして次の行に進みます。

したがってnext、最初のブロックを一番下に置くと、2番目のブロックは実行されません。

于 2012-09-03T18:30:32.410 に答える
3

なぜ単純ではないのですかif,else

awk '{ if ($0 ~ /^#/) 
           // Action for lines starting with '#'
       else
           // Action for other lines
      }'
于 2012-09-03T19:04:28.820 に答える
2

他のオプションは、一致オプションがバイナリの場合、「その他すべて」の行にパターン否定演算子「!」を使用することです。

/^#.*/ {
  // Action for lines starting with '#'
}

!/^#.*/ {
  // Action for other lines
}

もちろん、2番目のパターンは、ハッシュで始まらないすべてのもの、つまり/^[^#].*/と単純に一致する可能性もあります。

しかし、おそらく、あなたの例は単純化です。複雑な正規表現の場合、完全な逆一致を作成することは不可能な場合があります。否定演算子は、それを明示的かつ確実なものにします。

また、ご存知かもしれませんが、「。*」の部分は不要です。

于 2013-02-14T00:07:37.353 に答える