Найти дублирующиеся заголовки статей в моем файле .bib

Найти дублирующиеся заголовки статей в моем файле .bib

Я пишу свою диссертацию и скопировал и вставил часть содержимого предыдущих файлов .bib. Но, возможно, я использовал разные метки для одного и того же заголовка статьи, и, возможно, я процитировал эти разные метки в своей диссертации, так что, возможно, мои ссылки могут содержать одну и ту же статью дважды. У меня почти 190 ссылок, и я считаю, что будет сложно визуально найти повторяющиеся статьи.

Можно ли найти в моем файле bib записи с одинаковым названием? Я знаю, что bibtex ищет повторяющиеся метки. Можно ли найти повторяющиеся названия в моем файле .bib?

решение1

Вы можете использовать его perlдля просмотра файла bib, сохранения всех заголовков в виде хэш-ключа с его строкой в ​​качестве хэш-значения, а затем выполнить цикл по нему и вывести заголовок, если его значение имеет несколько записей. Для этого создайте файл со следующим содержимым, например, "finddupls.pl", измените имя файла bib, затем выполните perl finddupls.plв своем терминале:

#!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;

Он возвращает прямо в терминале что-то вроде этого:

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,

Кроме того, он записывает файл, sorted_titles.txtв котором в алфавитном порядке перечислены все названия, которые вы можете просмотреть и вручную обнаружить дубликаты.

решение2

Если вы можете быть уверены в titleидентичности поля, то очень просто:

grep -n 'title =' bibliography.bib | uniq -cdf 1

Это приведет к печати только неуникальных строк ( -d) и количеству их появлений ( -c) в файле bibliography.bib, а также номеров строк, в которых они появляются ( -n) в файле библиографии; -f 1указывает uniqигнорировать первое поле, которое будет номером этой строки.

Итак, если вы получите строку вроде:

     2 733:  title =    {Ethica Nicomachea},

Вы знаете, что у вас есть два появления, title = {Ethica Nicomachea},и первое из них появляется в строке 733 вашего .bibфайла.

Связанный контент