如何编写awk脚本筛选出生日期日部分存在于手机号中的行?
awk 匹配逻辑实现方案
完整可运行脚本
BEGIN { FS = "," } # 跳过表头行 NR == 1 { next } { # 拆分出生日期,默认支持横杠/斜杠分隔的格式,可根据实际日期格式调整分隔符 split($4, born_arr, /[-\/]/) # 提取日部分:YYYY-MM-DD/MM-DD-YYYY格式取born_arr[3],DD-MM-YYYY格式取born_arr[1],可按需调整索引 day_str = born_arr[3] # 核心匹配逻辑 # 方案1:使用index函数,无正则元字符风险,更稳妥 if (index($5, day_str) > 0) { # 按要求格式输出 print $1 " " $2 " " $4 ", " $5 } # 方案2:纯数字场景下可用正则匹配,写法更简洁 # if ($5 ~ day_str) { # print $1 " " $2 " " $4 ", " $5 # } }
匹配逻辑说明
- 优先推荐使用
index(主串, 子串)函数实现包含判断:该函数返回子串在主串中第一次出现的位置,返回值大于0即代表子串存在于主串中,不需要考虑正则元字符转义问题,适配性更强。 - 如果确认出生日期的日部分都是纯数字,也可以用正则匹配语法
主串 ~ 子串实现判断,效果一致。
运行方式
将脚本保存为filter.awk,输入文件为data.csv,运行命令:awk -f filter.awk data.csv
内容的提问来源于stack exchange,提问作者J-K
相关产品推荐
相关产品推荐

