awkで正規表現を使用して、最初のフィールドに4つの文字しかない行を印刷しますか?

awkで正規表現を使用して、最初のフィールドに4つの文字しかない行を印刷しますか?
John Goldenrod:(916) 348-4278:250:100:175

Chet Main:(510) 548-5258:50:95:135

Tom Savage:(408) 926-3456:250:168:200

Elizabeth Stachelin:(916) 440-1763:175:75:300

出力には、4文字の名前(john、chet)のみを含む行を含める必要があります。

awk '$1 ~ /[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]" "/ {print}' file

これは私には適していないようです。 awk関数を使用せずにこれを実行できますか?

ベストアンサー1

awkのフィールドはデフォルトでは" "で区切ります。これは$1空白がないことを意味するので、正しい正規表現は次$1のようになります。

awk '$1 ~ /^[a-zA-Z0-9]{4}$/ {print}' file

元の方法を維持するには、$0次のように使用することもできます。

awk '$0 ~ /^[a-zA-Z0-9]{4}\s/ {print}' file

\w簡単にするために、単語文字を明示的に定義する代わりに、次のように使用することもできます。

awk '$0 ~ /^\w{4}\s/ {print}' file

スペースだけを一致させ、他のものを一致させたくない場合は、「」(引用符を除く)にTAB置き換えてください。\s

元のアプローチのもう一つの問題は、アンカーポイントがないことです。指定しなかったため、パターンはどこにも現れません。つまり、パターンが と^一致します。$Elizabeth Stachelinbeth

おすすめ記事