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

答え2

grepを使用してください:

grep [^0-9][3][N] file

V- 一致しない項目/逆一致項目の表示

[0-9][3][N]- 正の整数 3N が前に来るパターンを探します。

答え3

次のコマンドを使用してテストすると、上記の例では正しく機能します。

awk '$2 ~ /[A-Za-z]3N/{print $0}' filename

関連情報