awkを使用して前に数字のない文字列を一致させるには?

awkを使用して前に数字のない文字列を一致させるには?

2番目の列には、次のファイルがあります。

37M533N38M
14M1170N45M233N16M
3S45M3N35M

以下を含む文字列を抽出したいと思います。3N しかし、以前は他の番号はありませんでした3。たとえば、一致しますがA3N一致23Nしません。また、3N決して単独では発生せず、文字列はで始まらず3Nで終わらないことに注意してください3N。結果は上記の3行目でなければなりません。

3S45M3N35M

awkではどうすればいいですか?私はそれを試しましたが、$2 ~ /3N/確かに動作しません。

ベストアンサー1

負の文字クラスを使用して、[^0-9]「数字を除くすべての文字」を意味できます。

awk '$2~/[^0-9]3N/' file

3Nフィールドの先頭にある場合も一致させ、その前に文字がないようにするには、次のようにします。

awk '$2~/(^|[^0-9])3N/' file

行全体ではなく2番目のフィールドのみを印刷するには、次のようにします。

awk '$2~/[^0-9]3N/{print $2}' file

または

awk '$2~/(^|[^0-9])3N/{print $2}' file

おすすめ記事