use strict; use warnings; my $data = <) { my ($date, $time, $endpoint, $kbid, $id, $title) = /(\S+)\s+ (\S+)\s+ (\S+)\s+ (\S+)\s+ (\w+-\d+\s+)? (.*)/x; $id ||= ''; $entries{$kbid} = { date => $date, time => $time, endpoint => $endpoint, id => $id, kbid => $kbid, title => $title, }; } close $inFile; print join ("\t", @{$_}{qw(id kbid title endpoint date)}), "\n" for sort {$a->{id} cmp $b->{id} or $a->{kbid} <=> $b->{kbid}} values %entries;