演算子の awk 正規表現

演算子の awk 正規表現

awk正規表現を使用してファイルの一致を計算して合計したいと思います。

このファイルfileには以下が含まれます。

Gra pes
gra ndma
straw berry
blue Berry
banana
peanut
school

パターンマッチングのための正規表現を作成する必要がありますが、どうすればよいかわかりません。そして/または正規表現では優先順位は同じですが、

私は試した:

awk 'tolower($1) ~ /(gra|straw) (pes|berry)|banana|peanut/ {sum+=1} END {print sum+0}' file

したがって、そのうちの1つでなければならず、(gra pes, gra berry, straw pes, straw berry) OR banana, peanut4つの一致があるため、4を返す必要があります。

私の構文に問題があるとします。またはバナナピーナッツですが、どのように修正するのかわかりません。

何が起こっているのかというアイデアはありますか?ありがとう

ベストアンサー1

正規表現は大丈夫です。あなたの問題は、あなたがtolower($1)それを一致させているということです最初のフィールド(スペースで区切り、デフォルトFS)を小文字に変換します。

たとえば、最初の行(Gra pes)は正規表現と一致し、gra失敗します。

完全な記録には以下が必要です$0

awk 'tolower($0) ~ /regexp/ ...'

また、デフォルトでは正規表現は固定されていないため、たとえば、次に見つかったpeanutbutterインスタンスと一致します。peanut入力レコードを正規表現で完全に一致させるには、次の手順を実行する必要があります。

awk 'tolower($0) ~ /^(foo|bar)$/'

どちらが一致するのかトピックの始まり^)の後にfoo、またはbar次のいずれかが続きます。トピックの終わり$)。ここでは括弧が重要です。 (開始から)または(終了から)に^foo|bar$することができますので、一致するか、たとえば。^foofoobar$barfooXYbar

おすすめ記事