如何使用AWK精准筛选联系电话93开头且2021年注册的人员记录
分号分隔人员信息文件精准筛选AWK方案
场景与现存问题
待处理文件drivers.txt为分号分隔的结构化人员信息,字段按固定顺序排列:
- 1: ID
- 2: Name(姓名)
- 3: Driving License ID(驾照编号)
- 4: Contact(联系电话)
- 5: Bank ID(银行卡号)
- 6: Balanca(账户余额)
- 7: Registration Date(注册日期)
筛选目标为:提取联系电话以93开头、且注册日期为2021年的人员记录。
最初编写的全局正则匹配命令存在跨字段误判缺陷:
awk '/;93/ && /2021-/' drivers.txt
该命令未限定匹配的字段范围,只要整行任意位置出现
;93和2021-就会判定为命中。例如测试样例中Mary的记录:银行卡号为935645332(字段前自带分号,刚好匹配;93规则)、注册日期为2021年,但联系电话以96开头,完全不符合筛选要求,却会被原命令错误输出。
正确实现命令
通过指定分隔符精准定位目标字段做规则匹配,可彻底避免跨字段误判:
awk -F';' '$4 ~ /^93/ && $7 ~ /^2021-/' drivers.txt
命令逻辑说明
-F';':明确设置AWK的字段分隔符为分号,和文件格式规则对齐,拆分后的每个字段可通过$+下标的形式直接访问$4 ~ /^93/:仅对第4个字段(联系电话)做匹配校验,正则中的^锚定字段内容开头,判断号码是否以93起始$7 ~ /^2021-/:仅对第7个字段(注册日期)做匹配校验,判断日期是否以2021-开头,即注册时间为2021年- 两个判断条件为逻辑与关系,仅同时满足两个规则的记录会被AWK默认打印输出,无需额外编写输出语句。
内容的提问来源于stack exchange,提问作者Coder101
相关产品推荐
相关产品推荐

