#!/bin/bash csv=$(mktemp) asleep=0 sort input.txt | while IFS='[]-:# ' read -r dummy year month day hour minute w1 w2 w3 do let asleep && echo $year-$month-$day,$prev,$minute,$id case $w1 in 'Guard') asleep=0 id=$w2 ;; 'falls') asleep=1 ;; 'wakes') asleep=0 ;; esac prev=$minute done >$csv sqlite3 <= start and minute < finish; create table safest as select minute, count(minute) as count from opportunities inner join sleepiest using (id) group by minute order by count desc limit 1; select (select minute from safest) * (select id from sleepiest); EOF rm $csv