在awk中,我可以在字段中搜索以下值:
$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; $2=="eaae" {print $0};'
aa,bb,cc
dd,eaae,ff
我可以使用像
这样的正则表达式进行搜索$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; /[a]{2}/ {print $0};'
aa,bb,cc
dd,eaae,ff
我可以强制awk将regexp搜索应用于特定字段吗?我正在寻找像
这样的东西$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; $2==/[a]{2}/ {print $0};'
期待结果:
dd,eaae,ff
任何人都知道如何使用awk做到这一点?
接受的回应 - 运营商"〜" (感谢hek2mgl):
$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; $2 ~ /[a]{2}/ {print $0};'
答案 0 :(得分:5)
您可以使用:
$2 ~ /REGEX/ {ACTION}
如果正则表达式仅应用于第二个字段(例如)。
在你的情况下,这将导致:
awk -F, '$2 ~ /^[a]{2}$/' <<< "aa,bb,cc\ndd,eaae,ff"
您可能想知道为什么我刚刚在awk程序中使用了正则表达式而没有print
。这是因为您的操作是print $0
- 打印当前行 - 这是awk中的默认操作。