如何用awk筛选邮箱超40字符行并重排出生日期、去除日期前导零
awk作业日期转换实现方案
以下是满足需求的完整实现逻辑,你可以结合你已完成的邮箱筛选逻辑调整字段序号即可:
核心代码示例
# 初始化月份缩写映射 BEGIN { mon[1] = "jan" mon[2] = "feb" mon[3] = "mar" mon[4] = "apr" mon[5] = "may" mon[6] = "jun" mon[7] = "jul" mon[8] = "aug" mon[9] = "sep" mon[10] = "oct" mon[11] = "nov" mon[12] = "dec" } # 自定义日期格式转换函数,入参为YYYY-MM-DD格式的日期字符串 function format_date(date, arr, y, m, d) { # 按分隔符拆分日期 split(date, arr, "-") # 转整数自动去除前导零 y = arr[1] + 0 m = arr[2] + 0 d = arr[3] + 0 # 拼接目标格式返回 return d "/" mon[m] "-" y } # 主逻辑:假设输入字段顺序为 名字 出生日期 邮箱,可按需调整字段序号 length($3) > 40 { print $1, format_date($2) }
关键逻辑说明
- 前导零去除:通过
字符串+0将日期的日、月部分转为整数,awk会自动丢弃前导零,实现比正则替换更简洁高效 - 自定义函数的局部变量:函数参数列表后额外声明的
arr、y、m、d为局部变量,不会污染全局作用域,符合awk的语法规范 - 月份映射:BEGIN块在脚本启动时仅执行一次,提前完成月份缩写的数组初始化,避免每一行处理都重复赋值
内容的提问来源于stack exchange,提问作者J-K
相关产品推荐
相关产品推荐

