#!/usr/bin/env perl -l use strict; use warnings; my (%data, %codes_found); my $sep = '^'; while () { next if $. == 1; chomp; my ($name, $code, $count) = split /\Q$sep/; ++$codes_found{$code}; $data{$name}{$code} = $count; } my @codes = sort keys %codes_found; print join $sep => 'Name', @codes; for my $name (sort keys %data) { print join $sep => $name, map { $data{$name}{$_} || '' } @codes; }