#!/usr/bin/perl # Usage: # sort_vendors.pl # Output goes to stdout. use utf8; use strict; #use File::Slurp::Unicode qw(read_file); sub read_file { my $file = shift; return do { local $/ = undef; open my $fh, "<", $file || die "Could not open $file: $!"; <$fh>; }; } my $file = shift; die "Invalid file: $file" unless (-f $file && -r $file); my $raw = read_file($file); $raw =~ s/^\n*|\n*$//g; my $c = 0; my @coms = (); my %vendors = (); SEC: foreach my $s (split(/\n{2,}/, $raw)) { my @lines = split(/\n/, $s); foreach my $l (@lines) { if ($l =~ /^name\s+(.*)/) { $vendors{"$1_$c"} = $s; $c++; next SEC; } } push @coms, $s; } foreach (@coms) { print "$_\n\n"; } foreach (sort { lc $a cmp lc $b } keys %vendors) { print "$vendors{$_}\n\n"; }