在我的 .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 1uniq

因此如果你得到如下一行:

     2 733:  title =    {Ethica Nicomachea},

您知道您有两次出现,title = {Ethica Nicomachea},其中第一次出现在.bib文件的第 733 行。

相关内容