如何通过awk的match函数实现多字符串匹配筛选记录?
用awk的
match()函数匹配多个字段值的解决方案 当然可以通过awk的match()函数实现这个需求!match()支持正则表达式作为匹配模式,我们只需要把想要匹配的多个值用正则分支符|连接起来就能达到目的。
修改后的awk脚本
awk -v FPAT='([^,]*)|("[^"]*")' 'NR==1; NR>1 && match($2, /THWR|RWGW|OSPW/)'
脚本细节解释
FPAT参数:保留了你原脚本中的设置,用于正确解析CSV格式(包括带引号的字段),确保逗号作为分隔符时不会错误拆分带引号的内容。NR==1:打印表头行,这个逻辑和原脚本完全一致。match($2, /THWR|RWGW|OSPW/):这里把匹配模式改成了正则表达式,THWR|RWGW|OSPW表示匹配第二列等于这三个字符串中的任意一个。match()函数会在$2中查找是否存在该正则匹配的内容,存在则返回非零值(视为逻辑真),进而触发打印该行的操作。
精确匹配的优化(可选)
如果你需要确保第二列完全等于这三个值(而不是包含它们的子串),可以给正则加上行首和行尾锚点,避免误匹配类似THWRX或RWGWP的字段:
awk -v FPAT='([^,]*)|("[^"]*")' 'NR==1; NR>1 && match($2, /^(THWR|RWGW|OSPW)$/)'
示例测试
输入内容:
col1,col2,col3 123,THWR,123 123,RWGW,123 123,OSPW,123 123,POOL,123 123,TYTY,123
输出结果:
col1,col2,col3 123,THWR,123 123,RWGW,123 123,OSPW,123
内容的提问来源于stack exchange,提问作者user2058738
相关产品推荐
相关产品推荐

