У меня есть данные в формате json, в которые записываются метки времени (чч: мм в 24-часовом формате) с событием (вход / выход). Моя цель - сложить все различия во времени между событием «IN» и следующим событием «OUT».
Для упрощения я предполагаю, что несоответствий нет (первым элементом всегда является «IN», а за каждым «IN» следует «OUT»). Исключение: если последним элементом является «IN», вычисление должно выполняться между текущим временем и отметкой времени с последнего события «IN».
Пока это мой скрипт, который вычисляет все временные промежутки, также между OUT и IN. Но мне нужны только те, которые находятся между событиями IN и OUT.
Любые советы, которые могут быть более полезными, приветствуются!
#!/bin/bash
JSON='{ "times": [ [ "7:43", "IN" ], [ "8:26", "OUT" ], [ "8:27", "IN" ], [ "9:12", "OUT" ], [ "9:14", "IN" ], [ "9:22", "OUT" ], [ "9:23", "IN " ], [ "12:12", "OUT" ], [ "13:12", "IN" ] ]}'
IN_TIMES=$(jq '.times | to_entries | .[] | select(.value[1]| tostring | contains("IN")) | .value[0]' <<< "$JSON")
OUT_TIMES=$(jq '.times | to_entries | .[] | select(.value[1]| tostring | contains("OUT")) | .value[0]' <<< "$JSON")
ALL_TIMES=$(jq -r '.times| to_entries | .[] | .value[0]' <<< "$JSON")
prevtime=0
count=0
for i in $(echo $ALL_TIMES | sed "s/ / /g")
do
if [[ "$count" -eq 0 ]]; then
(( count++ ))
prevtime=$i
continue
else
(( count++ ))
fi
time1=`date +%s -d ${prevtime}`
time2=`date +%s -d ${i}`
diffsec=`expr ${time2} - ${time1}`
echo From $prevtime to $i: `date +%H:%M -ud @${diffsec}`
prevtime=$i
done