хочу суммировать время (00:00:00) в команде AWK - PullRequest
0 голосов
/ 05 января 2019

У меня есть команда awk для суммирования времени из другого поля, она работает с числами, но при попытке с часами она не работает

пример

> cat ee.txt
amazon|4
ebay|5
alibab|10
ebay|4
amazon|5

> awk -F '|' '$1 ~ /ebay/{ sum += $2 } END{ print sum }' ee.txt
8

но когда мне нужно сложить время, команда не работает

> cat ee.txt
amazon  1:02:00
ebay    2:00:00
alibab  240:00:00
ebay    3:00:00
amazon  72:00:00

> awk -F '|' '$1 ~ /ebay/{ sum += $2 } END{ print sum }' ee.txt

вывод должен быть 5: 00: 00

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Еще один awk, использующий пробел и: в качестве разделителя

$ awk -F"[ :]+" ' { a[$1]+=$2*3600+$3*60+$4 } END {for(i in a){hr=int(a[i]/3600);mi=int((a[i]-hr*3600)/60);s=a[i]-3600*hr-60*mi;printf("%s %02d:%02d:%02d\n", i,hr,mi,s) }}' ee.txt
ebay 05:00:00
alibab 240:00:00
amazon 73:02:00
0 голосов
/ 05 января 2019

Примерно так:

$ awk '
/ebay/ {
    split($2,a,":")                # separate hs, ms and sses
    b+=a[1]*3600+a[2]*60+a[3]      # sum them up as as seconds
}
END {
    h=int(b/3600)                  # separate hs
    m=int((b-3600*h)/60)           # and ms
    s=b-3600*h-60*m                # and sses
    printf "%d:%02d:%02d\n",h,m,s  # output
}' file
5:00:00

По сути, вам нужно преобразовать все компоненты времени в секунды, суммировать записи и снова разбивать их на компоненты. Вы также могли бы использовать функции времени GNU awk , но это не позволяло бы выводить все чч: мм: сс, поскольку время> 24 ч конвертировалось бы в даты.

Редактировать

Добавлена ​​версия для суммирования всех значений и группировки по названию компании:

$ awk '
{
    split($2,a,":")                         # separate hs, ms and sses
    b[$1]+=a[1]*3600+a[2]*60+a[3]           # sum them up as as seconds
}
END { 
    for(i in b) {
        h=int(b[i]/3600)                    # separate hs
        m=int((b[i]-3600*h)/60)             # and ms
        s=b[i]-3600*h-60*m                  # and sses
        printf "%s %d:%02d:%02d\n",i,h,m,s  # output
    }
}' file
alibab 240:00:00
amazon 73:02:00
ebay 5:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...