No final, usei o seguinte script perl para realizar o trabalho:
#!/usr/bin/perl
use strict;
use warnings;
if ($#ARGV != 0) {
die "Usage: agc <target file>\n";
}
our %groups;
my $dstfilename = "$ARGV[0]";
my $srcfilename = "$ARGV[0].src";
open (SRCFILE, $srcfilename) or die "Could not open $srcfilename.\n";
while (<SRCFILE>) {
chomp;
if ($_ =~ /^(.*)\s*:\s*(.*)$/) {
$groups{$1} = $2;
}
}
close (SRCFILE);
open (DSTFILE, ">$dstfilename") or die "Could not open $dstfilename.\n";
print DSTFILE "# CAUTION: This file was generated from $srcfilename.\n";
print DSTFILE "# DO NOT EDIT MANUALLY - all changes will be lost upon re-generation.\n";
print DSTFILE "# Instead, edit $srcfilename and run 'agc $dstfilename'.\n";
foreach my $key (sort (keys (%groups))) {
print DSTFILE "$key:";
my @elems = split(/\s/, $groups{$key});
foreach my $elem (@elems) {
if ($elem =~ /^@(.*)/) {
print DSTFILE " " . $groups{$1};
} else {
print DSTFILE " $elem";
}
}
print DSTFILE "\n";
}
close (DSTFILE);