
Ich schreibe meine Abschlussarbeit und habe einige Inhalte aus früheren .bib-Dateien kopiert und eingefügt. Aber vielleicht habe ich für denselben Artikeltitel unterschiedliche Bezeichnungen verwendet und diese unterschiedlichen Bezeichnungen in meiner Abschlussarbeit zitiert, sodass meine Referenzen denselben Artikel möglicherweise zweimal enthalten. Ich habe fast 190 Referenzen und ich glaube, es wird schwierig sein, wiederholte Artikel visuell zu finden.
Ist es möglich, in meiner Bib-Datei Einträge mit demselben Titel zu finden? Ich weiß, dass Bibtex nach wiederholten Bezeichnungen sucht. Ist es möglich, in meiner .bib-Datei wiederholte Titel zu finden?
Antwort1
Sie können perl
die Bib-Datei durchgehen, alle Titel als Hash-Schlüssel mit der entsprechenden Zeile als Hash-Wert speichern und dann eine Schleife durchlaufen und den Titel drucken, wenn sein Wert mehrere Einträge hat. Erstellen Sie dazu eine Datei mit folgendem Inhalt, z. B. „finddupls.pl“, ändern Sie den Bib-Dateinamen und führen Sie sie dann perl finddupls.pl
in Ihrem Terminal aus:
#!perl
my %seen = ();
my $line = 0;
open my $B, 'file.bib';
while (<$B>) {
$line++;
# remove all non-alphanumeric characters, because bibtex could have " or { to encapsulate strings etc
s/[^a-zA-Z0-9 _-]//ig;
# lower-case everything to be case-insensitive
# pattern matches lines which start with title
$seen{lc($1)} .= "$line," if /^\s*title\s*(.+)$/i;
}
close $B;
# loop through the title and count the number of lines found
foreach my $title (keys %seen) {
# count number of elements seperated by comma
my $num = $seen{$title} =~ tr/,//;
print "title '$title' found $num times, lines: ".$seen{$title},"\n" if $num > 1;
}
# write sorted list into file
open my $S, '>sorted_titles.txt';
print $S join("\n", sort keys %seen);
close $S;
Es gibt direkt im Terminal etwa Folgendes zurück:
title 'observation on soil moisture of irrigation cropland by cosmic-ray probe' found 2 times, lines: 99,1350,
title 'multiscale and multivariate evaluation of water fluxes and states over european river basins' found 2 times, lines: 199,1820,
title 'calibration of a non-invasive cosmic-ray probe for wide area snow water equivalent measurement' found 2 times, lines: 5,32,
Außerdem wird eine Datei sorted_titles.txt
mit einer alphabetisch geordneten Auflistung aller Titel erstellt, die Sie manuell durchgehen und auf Duplikate prüfen können.
Antwort2
Wenn Sie sich darauf verlassen können, dass die title
Felder identisch sind, dann ist Folgendes ganz einfach:
grep -n 'title =' bibliography.bib | uniq -cdf 1
Dadurch werden nur nicht eindeutige Zeilen ( -d
) und die Häufigkeit ihres Auftretens ( -c
) für die Datei bibliography.bib
sowie die Zeilennummer ( -n
) ihres Auftretens in der Bibliografiedatei gedruckt. Dies -f 1
weist an uniq
, das erste Feld, das diese Zeilennummer wäre, zu ignorieren.
Wenn Sie also eine Zeile wie die folgende erhalten:
2 733: title = {Ethica Nicomachea},
Sie wissen, dass es zwei Vorkommen von gibt title = {Ethica Nicomachea},
und dass das erste davon in Zeile 733 Ihrer .bib
Datei erscheint.