#!/usr/bin/perl use strict; use warnings; use List::Util qw{ first }; my %duration; my $id; while () { chomp; $id = $1 if /Launching (\S+)/; if (my ($days, $hours, $minutes, $seconds) = /Run Duration: (.*)d (.*):(.*):(.*)/) { $duration{$id} = [$days, $hours, $minutes, $seconds]; } } for my $id (sort { my $d = first { $duration{$a}[$_] <=> $duration{$b}[$_] } 0 .. 3; $duration{$a}[$d] <=> $duration{$b}[$d] } keys %duration ) { print "$id\t"; print $duration{$id}[0], 'd'; print join ':', @{ $duration{$id} }[1, 2, 3]; print "\n"; } __DATA__ Launching series_eleven (started Sat Jan 11 7:31:47 PST 2020) SERIES RESULT (series_eleven) : Pass: 2/0/0 series_eleven (finished Sat Jan 11 7:31:58 PST 2020) series_eleven Run Duration: 0d 00:00:11 Launching series_twenty (started Sat Jan 11 7:31:47 PST 2020) SERIES RESULT (series_twenty) : Pass: 2/0/0 series_twenty (finished Sat Jan 11 7:31:58 PST 2020) series_twenty Run Duration: 0d 00:00:20 Launching series_minute (started Sat Jan 11 7:31:47 PST 2020) SERIES RESULT (series_minute) : Pass: 2/0/0 series_minute (finished Sat Jan 11 7:31:58 PST 2020) series_minute Run Duration: 0d 00:01:00 Launching series_hour (started Sat Jan 11 7:31:47 PST 2020) SERIES RESULT (series_hour) : Pass: 2/0/0 series_hour (finished Sat Jan 11 7:31:58 PST 2020) series_hour Run Duration: 0d 01:00:00 Launching series_day (started Sat Jan 11 7:31:47 PST 2020) SERIES RESULT (series_day) : Pass: 2/0/0 series_day (finished Sat Jan 11 7:31:58 PST 2020) series_day Run Duration: 1d 00:00:00 Launching series_week (started Sat Jan 11 7:31:47 PST 2020) SERIES RESULT (series_week) : Pass: 2/0/0 series_week (finished Sat Jan 11 7:31:58 PST 2020) series_week Run Duration: 7d 00:00:00