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