Problemstellung
Ich habe eine große Datei, die ich in mehrere kleinere Dateien .bib
aufteilen möchte ..bib
Dazu suche ich einen Parser, der es mir ermöglicht, beispielsweise alle @book
Einträge aus der Originaldatei zu extrahieren .bib
, um diese dann in einer neuen Datei zu speichern. Die Einträge selbst sollen dabei grundsätzlich unberührt bleiben.
Nur für den Fall, dass es hilft: Ich verwende biblatex
& biber
(unter Debian GNU/Linux), das, soweit ich mich erinnere, einige Parsing-Funktionen bietet, die ich hier gerne einsetzen würde.
Antwort1
Dies ist mit dem Tool-Modus von Biber möglich. Leider gab es in Versionen vor 2.11 ein kleines Problem mit der genauen Funktionalität, die Sie benötigen. Das Problem wurde gemeldet (https://github.com/plk/biber/issues/212) und wird in Biber 2.11 gelöst.
Erstellen Sie eine onlybooks.conf
mit dem Inhalt
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_align>true</output_align>
<output_fieldcase>lower</output_fieldcase>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<per_nottype>book</per_nottype>
<map_step map_entry_null="1" />
</map>
</maps>
</sourcemap>
</config>
Dann rufen Sie Biber an mit
biber --tool --configfile=onlybooks.conf <yourfile>.bib
und Ihnen sollte eine Datei mit dem Namen angezeigt werden, <yourfile>_bibertool.bib
die nur die @book
Einträge von enthält <yourfile>.bib
.
Der Vorbehalt, dass Biber in seinem Datenmodell unbekannte Felder löscht, gilt natürlich auch hier, sieheVerhindern Sie, dass „biber --tool“ nicht standardmäßige Felder in BIB-Dateien entfernt..
Alternativ können Sie verwenden bib2bib
von bibtex2html
. Weitere Informationen finden Sie imPDF-Dokumentation.
Verwenden
bib2bib -c '$type = "BOOK"' -ob onlybooks.bib <yourfile.bib>
um nur die @book
Einträge von <yourfile>.bib
in zu erhalten onlybooks.bib
.
Der Typ muss immer in Großbuchstaben und in Anführungszeichen gesetzt werden. Unter Windows müssen die äußeren Anführungszeichen doppelt und die inneren einfach sein -c "$type = 'BOOK'"
, unter Unix muss es umgekehrt sein.-c '$type = "BOOK"'
Sie können auchbibtool
:
bibtool --select{@book} all.bib -o some.bib
Schreibt nur die @book
Einträge von all.bib
nachsome.bib
Einige Bibliografiemanager wie JabRef bieten auch die Möglichkeit, .bib
Dateien zu filtern. Vielleicht kann das hier auch genutzt werden.