使用 bash 脚本计算数字差异并以冒号分隔的时间格式保存

使用 bash 脚本计算数字差异并以冒号分隔的时间格式保存

我有一个制表符分隔的文件,例如,

0018803 01  1710    2050    002571      
0018951 01  1934    2525    003277  
0019362 02  2404    2415    002829  
0019392 01  2621    2820    001924  
0019542 01  2208    2413    003434  
0019583 01  1815    2134    002971   

第 3 列和第 4 列表示 HHMM 格式的开始时间和结束时间。如果开始时间或结束时间超过午夜,它会不断增加小时数。

我希望第 6 列以小时和分钟为单位显示(第 4 列减去第 3 列)的经过时间。

此示例中第 6 列的结果将为3:40, 5:51, 00:11, 1:59, 2:05

答案1

您好,这假设开始时间和结束时间始终为 4 个字符长:

awk 'NF {hrs = substr($4, 1, 2) - substr($3, 1, 2); min = substr($4, 3, 4) - substr($3, 3, 4); if(min<0) {hrs--; min = 60 + min}; printf "%s\t%02d:%02d\n", $0, hrs, min}'

解释:

NF:字段数,这个是跳过空行

hrs = substr($4, 1, 2) - substr($3, 1, 2);:获取第4列的前2个字符并减去第3列的前2个字符并赋值给变量hrs

min = substr($4, 3, 4) - substr($3, 3, 4);:用分钟的最后 2 个字符重复最后一个逻辑;

if(min<0) {hrs--; min = 60 + min};:如果分钟为负数,则小时减 1,并将该负数加上 60 的结果赋给变量min

printf "%s\t%02d:%02d\n", $0, hrs, min:最后打印所有行和变量hrsmin补零

相关内容