如何让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
相关产品推荐
相关产品推荐

