
Estoy escribiendo mi tesis y copié y pegué algunos contenidos de archivos .bib anteriores. Pero tal vez usé etiquetas diferentes para el mismo título de artículo y tal vez cité estas etiquetas diferentes en mi tesis, por lo que tal vez mis referencias puedan contener el mismo artículo dos veces. Tengo casi 190 referencias y creo que será difícil encontrar visualmente artículos repetidos.
¿Es posible encontrar en mi fichero dorsal entradas con el mismo título? Sé que bibtex busca etiquetas repetidas. ¿Es posible encontrar títulos repetidos en mi archivo .bib?
Respuesta1
Puede utilizar perl
para revisar el archivo bib, guardar todos los títulos como una clave hash con su línea como valor hash y luego recorrerlo e imprimir el título si su valor tiene varias entradas. Para hacerlo, cree un archivo con el siguiente contenido, por ejemplo, "finddupls.pl", cambie el nombre del archivo bib y luego ejecútelo perl finddupls.pl
en su terminal:
#!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;
Devuelve directamente en la terminal algo como esto:
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,
Y, además, escribe un archivo sorted_titles.txt
que enumera todos los títulos ordenados alfabéticamente y que puede revisar y detectar duplicados manualmente.
Respuesta2
Si puede confiar en que el title
campo es idéntico, entonces es muy simple:
grep -n 'title =' bibliography.bib | uniq -cdf 1
Esto imprimirá sólo líneas no únicas ( -d
) y el número de veces que aparecen ( -c
) para el archivo bibliography.bib
y el número de línea que aparecen ( -n
) en el archivo de bibliografía; le -f 1
indica uniq
que ignore el primer campo, que sería este número de línea.
Entonces, si obtienes una línea como:
2 733: title = {Ethica Nicomachea},
Sabes que tienes dos apariciones de title = {Ethica Nicomachea},
y la primera de ellas aparece en la línea 733 de tu .bib
expediente.