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

如何让awk匹配的两个变量输出在同一行?脚本格式调整求助

解决脚本输出分行问题并修正日期格式

我来帮你调整这个脚本,你当前遇到的核心问题是awk分别输出两个值导致分行,同时原脚本里的日期处理也有误,没法生成你想要的yyyy-mm-dd格式。下面是修改后的完整脚本,直接就能输出你期望的结果:

awk -F"[.: ]" '
/start_time/ {
    # 记录start的完整时间,转换为yyyy-mm-dd HH:MM:SS格式
    start_str = $3 "-" $2 "-" $1 " " $4 ":" $5 ":" $6
    # 计算start时刻的总秒数,用于后续计算时间差
    start_sec = $4 * 3600 + $5 * 60 + $6
}
/end_time/ {
    # 计算end时刻的总秒数
    end_sec = $4 * 3600 + $5 * 60 + $6
    # 一次性输出组合后的结果:start时间 + 逗号 + 时间差(秒)
    print start_str "," (end_sec - start_sec)
}
' logs.txt

关键修改点说明:

  • 去掉了外层的for循环:原循环会把awk输出的每一行当成单独的变量打印,导致两个值分行。现在让awk直接输出完整的一行结果,避免拆分。
  • 修正日期格式转换:原脚本里的date=$4$5完全不符合需求,现在通过$3 "-" $2 "-" $1把日志里的dd.mm.yyyy转换成yyyy-mm-dd格式,再拼接上时间部分,得到完整的start时间字符串。
  • 合并输出逻辑:在匹配end_time时,直接把记录好的start时间和计算出的时间差用逗号分隔,一次性print出来,正好对应你要的输出格式。

运行这个脚本后,针对你提供的logs.txt,会输出:

2018-04-11 09:21:35,60
2018-04-11 10:45:00,900

完全符合你的期望。

内容的提问来源于stack exchange,提问作者Kaverappa KU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:24:11