如何用grep提取showinfo日志同一行的n和pts_time值并转换时间格式
问题原因
你之前的命令执行失败是因为grep -o仅会输出每行中匹配到的内容片段,第一次提取pts_time后,输出的内容已经丢失了同一行的n:X字段,后续的grep自然无法匹配到目标内容。
解决方案1:提取
n/pts_time格式内容 推荐使用awk或者sed单条命令完成提取,不需要多次管道拼接:
awk 方案(通用性强)
awk '/showinfo/ { match($0, /n:([0-9]+)/, n_arr) match($0, /pts_time:([0-9.]+)/, t_arr) print n_arr[1] "/" t_arr[1] }' file.txt > timestamps
sed 方案(兼容性更好,适合低版本系统)
sed -n '/showinfo/s/.*n:\([0-9]\+\).*pts_time:\([0-9.]\+\).*/\1\/\2/p' file.txt > timestamps
执行后输出内容完全符合你要求的格式:
48591/2024.62 48592/2024.67 48593/2024.71 48594/2024.75 ...
解决方案2:转换为时分秒可读格式
直接在awk中完成时间计算和格式化输出即可:
awk '/showinfo/ { match($0, /n:([0-9]+)/, n_arr) match($0, /pts_time:([0-9.]+)/, t_arr) ts = t_arr[1] + 0 h = int(ts / 3600) m = int((ts % 3600) / 60) s = ts % 60 printf "%s/%02d:%02d:%06.3f\n", n_arr[1], h, m, s }' file.txt > timestamps_readable
输出示例:
48591/00:33:44.620 48592/00:33:44.670 48593/00:33:44.710 48594/00:33:44.750 ...
格式说明:按照小时:分钟:秒.毫秒输出,不足两位的数值自动补前导零,毫秒部分保留3位。
内容的提问来源于stack exchange,提问作者Ruan Matt
相关产品推荐
相关产品推荐

