#!/usr/bin/perl -w use strict; my %dataset; while (<>) { # $_ => Id, Loc, Value, Etime my ($id, $loc, $value, $etime) = split(/,\s+/, $_); $dataset{$id}{$etime} = { "Value" => $value, "Loc" => $loc, }; } foreach my $id (sort keys %dataset) { foreach my $etime ( sort { $dataset{$id}{$a}{Loc} cmp $dataset{$id}{$b}{Loc} } keys %{$dataset{$id}}) { my $loc = $dataset{$id}{$etime}{Loc}; my $value = $dataset{$id}{$etime}{Value}; printf(STDOUT "%2s, %6s, %.1f, %i\n", $id, $loc, $value, $etime); } }