Bash脚本:补全日志行首缺失日期并添加递增序号标记
日志处理awk脚本
实现逻辑
- 识别行首符合
YYYY-MM-DD HH:MM:SS,mmm格式的日志行:遇到这类行时缓存日期前缀(包含原有:00000标记),将块内计数重置为0,拼接:00000标记后输出当前行 - 识别行首无日期的日志行:块内计数自增1,将计数格式化为5位补零的序号,拼接缓存的日期前缀后输出,完整保留行首前导空格、行内所有原始内容(包括行中出现的日期,不做修改)
- 每遇到新的带行首日期的行,计数自动重置为00000重新开始编号
可直接执行的脚本
适配Windows 10 MingW64环境,将脚本中日志文件名替换为实际路径后,直接在对应目录下执行即可:
awk ' /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}/ { date_prefix = substr($0, 1, 29) seq = 0 printf "%s:%05d%s\n", date_prefix, seq, substr($0, 30) next } { seq++ printf "%s:%05d%s\n", date_prefix, seq, $0 } ' 你的日志文件路径.txt
效果验证
针对给出的实际输入样例,脚本输出完全匹配期望结果:
2022-06-09 10:00:01,000:00000:00000 string1 2022-06-09 10:00:01,000:00000:00001 string2 2022-06-09 10:00:01,000:00000:00002 string3 2022-06-09 10:00:02,000:00000:00000 string4 2022-06-09 10:00:02,000:00000:00001 string5 2022-06-09 10:00:02,000:00000:00002 string6 2022-06-09 10:00:03,000:00000:00000 string7 2022-06-09 10:00:04,000:00000:00000 string8 2022-06-09 10:00:05,000:00000:00000 string9
内容的提问来源于stack exchange,提问作者Andlas
相关产品推荐
相关产品推荐

