解析/var/log/pm-suspend.log日期并转换为Unix时间戳的方法
解析/var/log/pm-suspend.log日期并转换为Unix时间戳的方法
首先得帮你纠正个小细节:你提到的格式串里,分钟对应的占位符应该是%M而不是%m(%m是用来表示月份的),所以正确的输入格式应该是"%a %d %b %Y %I:%M:%S %p %z",这点很重要,不然转换会出错哦。
在Bash里,我们可以用GNU date命令直接完成这个转换,核心思路是用-d(或--date)参数指定输入的日期字符串,再用+%s参数输出Unix时间戳。
具体操作方式:
单个日期转换:先把日志里的目标日期存到变量中,再用
date命令转换:# 示例日期,替换为你从日志里提取的内容 log_date="Wed 05 Jul 2023 04:55:30 PM +03" # 转换为Unix时间戳 date -d "$log_date" +%s执行后会直接输出对应的时间戳(比如示例日期会返回
1688560530)。如果自动识别格式有问题,也可以明确指定输入格式:echo "$log_date" | date -f - +"%a %d %b %Y %I:%M:%S %p %z" +%s批量处理日志日期:如果需要转换日志里所有符合格式的日期行,可以结合
grep提取目标行,再逐个转换:# 提取日志中的日期行并批量转换 grep -E '^[A-Za-z]{3} [0-9]{2} [A-Za-z]{3} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} [AP]M [+-][0-9]{2}' /var/log/pm-suspend.log | while read -r line; do timestamp=$(date -d "$line" +%s) echo "$line -> $timestamp" done
备注:内容来源于stack exchange,提问作者ceremcem
相关产品推荐
相关产品推荐

