You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:54:04