#!/usr/bin/env perl use strict; use warnings; my %data; while () { next if /ZIP/; chomp; my ($zip, $money, $date, $id) = split /\s*,\s*/; $data{$zip}{total} += $money; $data{$zip}{date} = $date; $data{$zip}{id} = $id; } my @dates; for my $zip (keys %data) { push @dates, $data{$zip}{date} if exists $data{$zip}{date}; } print "ZIP"; for (@dates) {print ",Total($_)"} print ",ID\n"; for my $zip (keys %data) { print "$zip, "; for (@dates) { if ($data{$zip}{date} eq $_) { print "$data{$zip}{total},"; } else { print "0,"; } } print "$data{$zip}{id}\n"; } __DATA__ ZIP, Money, Date, ID 12345, 200, 11062000, C1234 12345, 50, 11062000, C1234 67890, 50, 11072000, D5555