如何添加以 days-hh:min:ss.nnn 格式表示的持续时间?

mkc*_*mkc 3 awk perl

文件格式如下:

aaa 1-00:12:43.122
aaa 0-21:14:43.133
bbb 3-11:14:54.433
bbb 2-00:00:10
Run Code Online (Sandbox Code Playgroud)

第二列上的数字格式为d-hh:mm:ss.nnn。在某些情况下,最后三位十进制数字不存在。我试图弄清楚如何对按第一列分组的它们求和以获得每个用户的总持续时间。因此,对于此示例,结果将是:

aaa 1-21:27:26.255
bbb 5-11:15:04.433
Run Code Online (Sandbox Code Playgroud)

Dop*_*oti 6

使用这个awk脚本:

BEGIN {
   FS=" |-|:"
}
{
   data[$1][2]+=$2
   data[$1][3]+=$3
   data[$1][4]+=$4
   data[$1][5]+=$5
}
END {
   for( record in data ) {
      if( data[record][5]>=60 ) {
         data[record][4]+=1
         data[record][5]-=60.0
      }
      if( data[record][4]>=60 ) {
         data[record][3]+=1
         data[record][4]-=60
      }
      if( data[record][3]>=24 ) {
         data[record][2]+=1
         data[record][3]-=24
      }
      printf( "%s %d-%02.0f:%02.0f:%06.3f\n", record, data[record][2], data[record][3], data[record][4], data[record][5] )
   }
}
Run Code Online (Sandbox Code Playgroud)

用法:

~/scratch/se/379631$ cat input
aaa 1-00:12:43.122
aaa 0-21:14:43.133
bbb 3-11:14:54.433
bbb 2-00:00:10
~/scratch/se/379631$ gawk -f 379631.awk input
aaa 1-21:27:26.255
bbb 5-11:15:04.433
Run Code Online (Sandbox Code Playgroud)