如何在Bash中将毫秒转换为时长(不含日期)
Bash实现毫秒转时分秒.毫秒格式时长
要将文本文件中每行的毫秒值转换为HH:MM:SS.ss格式的时长,最直接高效的方式是使用awk工具——它能直接处理文本行并完成数值计算与格式化输出,完全无需涉及纪元时间或日期转换。
核心实现命令
针对你的milisecond.txt文件,执行以下命令即可完成转换:
awk '{ ms = $1 # 提取毫秒部分(取前两位) ms_segment = int((ms % 1000) / 10) # 计算总秒数 total_seconds = int(ms / 1000) # 拆分秒、分、小时 seconds = total_seconds % 60 total_minutes = int(total_seconds / 60) minutes = total_minutes % 60 hours = int(total_minutes / 60) # 格式化输出为两位数字,不足补0 printf("%02d:%02d:%02d.%02d\n", hours, minutes, seconds, ms_segment) }' milisecond.txt
输出结果示例
针对你提供的输入文件内容:
169920 269320 163920 1339520
执行命令后会输出:
00:02:49.92 00:04:29.32 00:02:43.92 02:13:15.52
备选方法(date工具,注意局限性)
如果你想用date工具辅助转换,可使用以下循环命令,但该方法仅适用于毫秒数不超过一天(86400000毫秒)的场景,超过后会出现日期循环:
while read ms; do # 用date生成时分秒部分,再拼接毫秒前两位 date -u -d "@$((ms/1000))" +"%H:%M:%S" | awk -v ms_part="$((ms%1000))" '{print $0 "." int(ms_part/10)}' done < milisecond.txt
内容的提问来源于stack exchange,提问作者Estatistics
相关产品推荐
相关产品推荐

