/ / як мені зайнятись відніманням двох різних часів у баш-середовищі - bash, math, time

як мені потрібно було вирахувати два різні моменти в bash середовищі - bash, math, time

Зараз я працюю над сценарієм, який обробляєі поєднує декілька різних файлів, і для однієї частини необхідно, щоб я знайшов різницю між двома різними часом, щоб визначити "загальну" кількість часу, яку хтось працював. самі часи у наступному форматі

 34:18:00,40:26:00,06:08:00

причому перший - час початку, другий - кінецьчас, третій загальний час. Хоча ця відображається правильно, є деякі записи, які потрібно подвійно перевірити та виправити (загальний час не вірно залежно від часу початку / закінчення). Я знайшов кілька різних рішень в інших публікаціях, але більшість з них також включають дати і такі (також більшість з них використовує awk), я не досвідчений з awk, тому не знаю, як іти про видалення частини дати з цих прикладів. Я також чув, що я міг перетворити епохи в епоху часу Unix, але мені було просто цікаво, чи є інші способи досягти цього, дякую!

Відповіді:

7 для відповіді № 1

Щось подібне може допомогти вам:

#!/bin/bash

time2seconds() {
a=( ${1//:/ } )
echo $((${a[0]}*3600+${a[1]}*60+${a[2]}))
}
seconds2time() {
printf "%.2d:%.2d:%.2d" $(($1/3600)) $((($1/60)%60)) $(($1%60))
}

IFS=, read start stop difference <<< "34:18:00,40:26:00,06:08:00"

printf "Start=%sn" "$start"
printf "Stop=%sn" "$stop"
printf "Difference=%s (given in file: %s)n" $(seconds2time $(($(time2seconds $stop)-$(time2seconds $start)))) "$difference"

Вихід:

Start=34:18:00
Stop=40:26:00
Difference=06:08:00 (given in file: 06:08:00)

Примітка: нічого не перевіряє, чи час у правильному форматі, я не знаю, наскільки надійні ваші дані.