use*_*373 0 awk text-processing
我有一个文件,其中第二列如下所示:
37M533N38M
14M1170N45M233N16M
3S45M3N35M
Run Code Online (Sandbox Code Playgroud)
我想提取那些包含字符串3N ,但之前立即没有其他号码3。因此,例如,A3N会匹配但23N不会。还应该注意的是3N,永远不会单独存在,并且字符串3N不会以3N. 结果应该是上面的第三行:
3S45M3N35M
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 awk 中做到这一点?我试过了,$2 ~ /3N/但这肯定行不通。
您可以使用否定字符类:[^0-9]表示“除数字外的任何字符”:
awk '$2~/[^0-9]3N/' file
Run Code Online (Sandbox Code Playgroud)
如果您还想匹配3N在字段开头的情况,因此在它之前没有字符,请使用:
awk '$2~/(^|[^0-9])3N/' file
Run Code Online (Sandbox Code Playgroud)
如果您只想打印第二个字段而不是整行,请使用:
awk '$2~/[^0-9]3N/{print $2}' file
Run Code Online (Sandbox Code Playgroud)
或者
awk '$2~/(^|[^0-9])3N/{print $2}' file
Run Code Online (Sandbox Code Playgroud)