awkは、式に一致するすべてのパターンに一致するようで、対応するアクションを実行します。関連付けることができる優先順位はありますか?
たとえば。以下では、#(コメント)で始まる行が両方のパターンで一致し、両方のアクションが実行されます。コメント行を最初のアクションのみに一致させたい。
/^#.*/ {
// Action for lines starting with '#'
}
{
// Action for other lines
}
awkは、式に一致するすべてのパターンに一致するようで、対応するアクションを実行します。関連付けることができる優先順位はありますか?
たとえば。以下では、#(コメント)で始まる行が両方のパターンで一致し、両方のアクションが実行されます。コメント行を最初のアクションのみに一致させたい。
/^#.*/ {
// Action for lines starting with '#'
}
{
// Action for other lines
}
すでに持っているコードをほとんどそのままにしておきたい場合は、awk
次のステートメントを使用できます。next
ステートメントに遭遇するとawk
、現在のレコードの処理をスキップして次の行に進みます。
したがってnext
、最初のブロックを一番下に置くと、2番目のブロックは実行されません。
なぜ単純ではないのですかif,else
:
awk '{ if ($0 ~ /^#/)
// Action for lines starting with '#'
else
// Action for other lines
}'
他のオプションは、一致オプションがバイナリの場合、「その他すべて」の行にパターン否定演算子「!」を使用することです。
/^#.*/ {
// Action for lines starting with '#'
}
!/^#.*/ {
// Action for other lines
}
もちろん、2番目のパターンは、ハッシュで始まらないすべてのもの、つまり/^[^#].*/と単純に一致する可能性もあります。
しかし、おそらく、あなたの例は単純化です。複雑な正規表現の場合、完全な逆一致を作成することは不可能な場合があります。否定演算子は、それを明示的かつ確実なものにします。
また、ご存知かもしれませんが、「。*」の部分は不要です。