cgal/Manual/developer_scripts/bibmerge

34 lines
798 B
Perl
Executable File

#!/opt/gnu/bin/perl
# usage: bibmerge bibfiles
# merges .bib files to standard output, removing duplicates.
# an array of the citations, indexed by the bib key
@cite_keys = ();
# an array of string abbreviations, indexed by the abbreviation
# (for entries such as
@abbreviations = ();
# break chunks at @ signs
$/ = '@';
while (<>) {
chop; # chop off the @ sign
if (($abbr) = ($_ =~ m/\s*string\s*[\{\(]\s*(\w+)/i) ) { # if it's a string
$abbreviations{$abbr} = $_;
} elsif (($key) = ($_ =~ m/[^\(\{][\(\{]\s*([^,\s]*)\s*,/) ) {
$cite_keys{$key} = $_;
}
}
# print each unique abbreviation command
while ( ($abbr,$string) = each %abbreviations) {
print "\@$string";
}
# print each uniquely keyed entry
while( ($key,$value) = each %cite_keys) {
print "\@$value";
}