Not really a *TeX answer, but you can write a small script in any programming language of your choice, for example perl (for demonstration purposes only, i.e., regexes not robust, adjust to Zotero output or use some proper key-value pair library):
open(BIB,"<$ARGV[0]");
open(XTR,"<$ARGV[1]");
while($line=<BIB>){
if($line=~/^\s*@(.*?){\s*(.*),\s*$/){ #% read BibTeX key
$key = $2;
$type{$key}=$1;
}
if($line=~/^\s*(\w+)\s*=\s*(.*?),?\s*$/){ #% store field values for key
$val{$key}{$1}=$2;
}
}
while($line=<XTR>){
if($line=~/^(.*?),(.*?),(.*)$/){ #% store additional fields
$val{$1}{$2}=$3;
}
}
foreach $key(sort keys %val){ #% print everything to stdout
print "@".$type{$key}."{$key,\n";
foreach $field (sort keys %{$val{$key}}){
print "\t$field\t=\t$val{$key}{$field},\n";
}
print "}\n\n";
}
Usage: perl BibTexAddFieldTool.pl myBibliography.bib myAddedFields.txt
Sample bibliography:
@book{chicken:2010fj,
author = {Chicken, C},
title = {Chicken},
publisher = {Chicken Press},
year = {2010}
}
@book{lemur:2009ii,
author = {Lemur, L},
title = {Lemur},
publisher = {Lemur Press},
year = {2009}
}
Additional fields:
chicken:2010fj,doi,{12345}
lemur:2009ii,doi,{54321}
lemur:2009ii,title,{Lemur Adventures}
Output:
@book{chicken:2010fj,
author = {Chicken, C},
doi = {12345},
publisher = {Chicken Press},
title = {Chicken},
year = {2010},
}
@book{lemur:2009ii,
author = {Lemur, L},
doi = {54321},
publisher = {Lemur Press},
title = {Lemur Adventures},
year = {2009},
}
DOI: 10.123/4567
, Zotero would very likely even auto-convert them once the field is included for chapters.