#!/usr/bin/env perl use strict; use warnings; use constant ID => 0; use constant TIME => 1; use constant TASK => 2; use constant DATA => 3; my %processes; while (<>) { my ($pid, $id, $time, $task, $data) = m/^TIMING\s+(\d+)\s+(\d+)\s+([\d\.]+)\s+(.*)\s*:\s*(.*)$/; next unless $pid; push @{$processes{$pid}}, [$id, $time, $task, $data]; } foreach my $pid (keys %processes) { my $indent = -1; print "Timing data for PID $pid\n\n"; my @events = sort { $a->[TIME] <=> $b->[TIME] } @{$processes{$pid}}; foreach my $event (@events) { $indent++ if $event->[DATA] eq "START"; print " "x$indent, "@$event\n"; $indent-- if $event->[DATA] eq "END"; } print "\n"; }