#!/usr/bin/perl use warnings; use strict; my %violations_by_category; my $category; while () { if (/^([A-Z])_[0-9]+:/) { $category = $1; } elsif (/([0-9]+) violations?/) { $violations_by_category{$category} += $1; } } for my $category (keys %violations_by_category) { print $category, " ", $violations_by_category{$category}, "\n"; } __DATA__ A_01: xxxxxxx xxxxxxxxxx xxx......... 1 violation A_02: xxxxxxx xxxxxxxxxx xxx......... 4 violations B_02: xxxxxxxx xxxxxxxxxx xxx......... 3 violations