bash - 使用awk计算时间差

标签 bash shell awk

我有以下 input.txt 文件。我需要计算 $2 和 $3 的时差并以小时为单位打印时差。

P1,       2016-05-30 00:11:20,    2016-05-30 04:36:40
P2,       2016-05-30 00:07:20,    2016-05-30 04:32:31

我有以下代码,但时间显示不准确。请帮忙。

awk -F, '{gsub(/[-:]/," ",$2);gsub(/[-:]/," ",$3);
          d2=mktime($3);d1=mktime($2);
          print $1","(d2-d1)/3600,"hrs";}' input.txt

我得到这样的输出。

P1,4.42222 hrs
P2,4.41972 hrs

但应该是有区别的 4:25:20 小时 4:25:11 小时

提前致谢

最佳答案

如果您想以 HH:MM:SS 语法打印秒数,您需要自己进行计算。如果您想打印 4:02:30 而不是 4:2:30,则使用 printf 会很有用。例如,

secs = d2 - d1;
printf "%s, %d:%02d:%02d hrs.\n", $1, int(secs/3600), int(secs/60)%60, secs%60

关于bash - 使用awk计算时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531525/

相关文章:

bash - awk 循环覆盖文件

linux - xargs 并查找,rm 提示文件名中的\n(换行符)

linux - Grep csv 与来自另一个 csv 的参数

linux - SED & AWK 在一行中打印文件中的条目

linux - 如何使用 Sed 搜索将整个单词替换为文件中的字符串匹配项

bash - 写入文件描述符 3 而不写入磁盘?

shell - script -c 'command' 的引用规则

linux - Bash 调用两个 bash 脚本

linux - 使用 shell 脚本检查 EOF

使用 "-n"时,Bash "$@"参数无法被脚本识别