Build a Pubmed query given long gene list I would like to search the literature using the Pubmed search engine for a set of genes that are associated with a brain region of interest. Unfortunately, there are a lot of them. It's possible there is no solution if there is a character limit on the query. I think it would be easiest to do this with 'nix tools but I'm open to R libraries or Python implementations too.

The list is 908 genes long. It's from the Gensat annotation search engine, with the filters Structure IS olfactory bulb &amp; Expression level IS moderate to strong signal &amp; Expression pattern IS region-specific.

The list looks like, scraped from the dropdown list in the HTML source with a regular expression: 

Aatf
Abcb1b
Abhd3
Abhd4
Abhd5
...


The Pubmed query should look like:

(((((((Aatf) OR Abcb1b) OR Abhd3) OR Abhd4) OR Abhd5) OR Abl2) AND olfactory bulb 


but with 908 genes separated by OR and parentheses.

Bonus points if you find/write a utility which adds gene synonyms to the query!
After getting it out on paper (so to speak) I was able to accomplish what I wished with bash:

#!/bin/bash

gene_list=($(cat ./markers_clean.txt))
query=${gene_list[@]:0:1}
parens="("  
for gene in ${gene_list[@]:1} 
    do
        query="${query} OR ${gene})"
        parens="${parens}("
    done
echo "${parens}${query} AND olfactory bulb)"


With the output being:

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Aatf OR Abcb1b) OR Abhd3) OR Abhd4) OR Abhd5) OR Abl2) OR Ablim2) OR Acaa2) OR Ackr3) OR Acsbg1) OR Acvr1c) OR Acvr2a) OR Adam11) OR Adam23) OR Adcy1) OR Adcyap1) OR Adgrg1) OR Adora2a) OR Adra2a) OR Adra2c) OR AF529169) OR Agrp) OR Agt) OR Agtr1a) OR Agtr2) OR Ak4) OR Akap12) OR Akap5) OR Akr1c18) OR Aldh1l1) OR Aldh7a1) OR Aldoc) OR Als2) OR Amfr) OR Amigo1) OR Amigo2) OR Angpt2) OR Ank) OR Ank2) OR Ankrd34b) OR Api5) OR Apod) OR Arc) OR Arf6) OR Arhgap33) OR Arhgdig) OR Arhgef6) OR Arhgef7) OR Arl6ip1) OR Arpp21) OR Arvcf) OR Arx) OR Ascl1) OR Aspm) OR Atg4c) OR Atic) OR Atoh1) OR Atp1a1) OR Atp1b1) OR Atp2a2) OR Atp5a1) OR Atp5j2) OR Atp6v1b2) OR Atpif1) OR Avp) OR Avpr1a) OR Avpr1b) OR B2m) OR B3gat1) OR Bahcc1) OR Baiap2) OR Bcar1) OR Bdnf) OR Becn1) OR Bend5) OR Bmp1) OR Bmp6) OR Bmp7) OR Bnip3) OR Bsx) OR Btbd17) OR Btg1) OR Btg2) OR Btg3) OR C1ql2) OR C1ql3) OR C2cd2l) OR C33) OR Cacna1h) OR Cacna1i) OR Cacnb1) OR Cacng3) OR Cacng5) OR Cadps) OR Calb1) OR Calb2) OR Calca) OR Calcb) OR Calcr) OR Camk2a) OR Camkk1) OR Camkk2) OR Camkv) OR Card6) OR Cartpt) OR Casp9) OR Casr) OR Cbln1) OR Cbln2) OR Cbln4) OR Cbx5) OR Ccdc163) OR Ccdc184) OR Ccdc187) OR Ccdc3) OR Cck) OR Cckbr) OR Ccna2) OR Ccnd1) OR Ccne1) OR Ccne2) OR Ccsap) OR Cd63) OR Cdc42bpg) OR Cdc42ep4) OR Cdc6) OR Cdh1) OR Cdh11) OR Cdh3) OR Cdh6) OR Cdh9) OR Cdhr1) OR Cdk17) OR Cdk4) OR Cdk5) OR Cdk5r1) OR Cdk5r2) OR Cdk6) OR Cdkn1a) OR Cdkn1b) OR Cdkn2a) OR Cdkn2c) OR Cdkn2d) OR Cdon) OR Cdr2) OR Celf6) OR Cemip) OR Chd7) OR Chn2) OR Chrm1) OR Chrm4) OR Chrna2) OR Chrna3) OR Chrna4) OR Chrna5) OR Chrna7) OR Chrnb2) OR Chrnb4) OR Chst15) OR Chst2) OR Cic) OR Cisd1) OR Cited1) OR Ckmt1) OR Clcn1) OR Cldn1) OR Clu) OR Cnr1) OR Cntfr) OR Cntn2) OR Cntnap1) OR Coch) OR Col6a1) OR Colgalt2) OR Cpe) OR Cpne6) OR Crabp1) OR Creb1) OR Crh) OR Crhr1) OR Crhr2) OR Crim1) OR Crip2) OR Crk) OR Crym) OR Csnk1g3) OR Ctgf) OR Ctxn1) OR Cx3cl1) OR Cxcl11) OR Cxcl12) OR Cxcr4) OR Cxxc4) OR Cyb561) OR Cyp19a1) OR Cyp4v3) OR Cyr61) OR D8Ertd738e) OR Dbi) OR Dbp) OR Dcdc2a) OR Dct) OR Dctn1) OR Dcx) OR Ddit4l) OR Dgcr14) OR Dgcr6) OR Dhcr24) OR Dhrs3) OR Dhx57) OR Dkk3) OR Dlg4) OR Dlk1) OR Dll1) OR Dlx1) OR Dlx2) OR Dlx5) OR Dlx6) OR Dmbx1) OR Dnajb1) OR Dnajc12) OR Dnmt1) OR Dnmt3a) OR Doc2g) OR Drd1) OR Drd2) OR Drd3) OR Dsp) OR Dtx4) OR Dtymk) OR Dusp1) OR Dusp14) OR Dusp16) OR Dusp3) OR Dusp5) OR Dyrk1a) OR Dyx1c1) OR Dzip1) OR E2f8) OR Ebf2) OR Ebf3) OR Eef1a1) OR Efna1) OR Efnb1) OR Efnb2) OR Efr3a) OR Efs) OR Egr1) OR Eif1ax) OR Eif3h) OR Eif4e3) OR Eif4g2) OR Elavl2) OR Elavl3) OR Elavl4) OR Elfn1) OR Ell3) OR Emp1) OR Emx1) OR En2) OR Enah) OR Enc1) OR Eno1) OR Eno2) OR Entpd4) OR Eomes) OR Epha4) OR Epha7) OR Epha8) OR Eps8l2) OR Erp29) OR Esr2) OR Esyt3) OR Evx1) OR F2r) OR Fam171b) OR Fam81a) OR Fam84a) OR Fbxl5) OR Fbxo32) OR Fezf1) OR Fezf2) OR Fgd5) OR Fgf1) OR Fgf1) OR Fgf13) OR Fgf15) OR Fgfr1) OR Fign) OR Fkbp2) OR Fkbp3) OR Flrt1) OR Flrt2) OR Fn1) OR Fos) OR Foxi1) OR Foxi2) OR Foxm1) OR Foxp4) OR Frat1) OR Fryl) OR Frzb) OR Fxyd6) OR Fxyd7) OR Fzd2) OR Fzd3) OR Fzd5) OR Fzd8) OR Gaa) OR Gabbr1) OR Gabrb2) OR Gabre) OR Gabrg1) OR Gabrg2) OR Gad2) OR Gal) OR Galnt1) OR Galnt5) OR Galnt9) OR Galr3) OR Gap43) OR Gas1) OR Gbx2) OR Gck) OR Gcm2) OR Gdf1) OR Gfap) OR Gja1) OR Gjd2) OR Glce) OR Gldc) OR Glrb) OR Gls) OR Glud1) OR Gng1) OR Gng13) OR Gng3) OR Gng4) OR Gng5) OR Gng7) OR Gpc4) OR Gpm6a) OR Gpr12) OR Gpr139) OR Gpr151) OR Gpr165) OR Gpr21) OR Gpr27) OR Gpr37) OR Gpr68) OR Gpr83) OR Gpr88) OR Gprin3) OR Gpsm1) OR Gria2) OR Grid2ip) OR Grin2c) OR Grm1) OR Grm2) OR Grm4) OR Grp) OR Gsx2) OR Gtf2i) OR Gucy1a3) OR Hap1) OR Hbegf) OR Hcfc1) OR Hcn2) OR Hcn4) OR Hdac11) OR Hdc) OR Herc3) OR Hes6) OR Hey1) OR Hey2) OR Hgs) OR Hmgn2) OR Hmgn3) OR Hnrnpab) OR Hpcal1) OR Hrasls) OR Hrh2) OR Hsd11b1) OR Hspa12a) OR Hspb8) OR Htr1a) OR Htr1b) OR Htr1d) OR Htr3a) OR Htr3b) OR Htr4) OR Htr5b) OR Htr6) OR Icam5) OR Ict1) OR Id1) OR Id4) OR Idh3a) OR Ier5) OR Igf1) OR Igfbp2) OR Igfbp4) OR Igfbp5) OR Igsf9) OR Inpp5j) OR Insig2) OR Iqsec3) OR Irs4) OR Isl2) OR Islr2) OR Itgb3) OR Itm2b) OR Jag1) OR Jag2) OR Jak2) OR Jam3) OR Jph4) OR Jup) OR Kcnc1) OR Kcnc4) OR Kcnip2) OR Kcnj5) OR Kcnk1) OR Kcnq2) OR Kctd13) OR Kctd4) OR Kif11) OR Kif26a) OR Kit) OR Kitl) OR Klf1) OR Klf13) OR Kremen1) OR Krt19) OR Lamb1) OR Lamp5) OR Layn) OR Lbh) OR Ldb1) OR Lef1) OR Lfng) OR Lgals3) OR Lgi1) OR Lhx1) OR Lhx2) OR Lhx4) OR Lhx5) OR Lhx6) OR Lhx8) OR Limk1) OR Lix1) OR Lmo1) OR Lmo4) OR Lpar1) OR Lpl) OR Lrfn5) OR Lrig1) OR Lrig2) OR Lrp1) OR Lrp12) OR Lrp2) OR Lrrk2) OR Lrrn1) OR Lrrn3) OR Lrrtm2) OR Lss) OR Ly6h) OR Lynx1) OR Lypd1) OR Lypd2) OR Lypd6) OR Lzts1) OR Mafb) OR MAGEA8) OR Man1a2) OR Map1b) OR Map1lc3a) OR Map2k6) OR Map4k5) OR Mapk1) OR Mapk8) OR Mapt) OR March4) OR Matk) OR Mb21d2) OR Mbd2) OR Mbd4) OR Mc3r) OR Mc4r) OR Mdk) OR Med12) OR Mef2c) OR Meis1) OR Met) OR Mfap2) OR Mfap4) OR Mfn1) OR Mmp17) OR Mmp2) OR Mpc1) OR Mst1r) OR Msx1) OR Mtap) OR Mturn) OR Mxi1) OR Mycn) OR Nae1) OR Napb) OR Nars) OR Ncor1) OR Ndn) OR Ndnf) OR Ndrg1) OR Ndufv1) OR Ndufv2) OR Nectin3) OR Nefh) OR Nefl) OR Nefm) OR Neurod1) OR Neurod4) OR Neurod6) OR Neurog1) OR Neurog2) OR Nfil3) OR Nhlh1) OR Nhp2) OR NKAIN2) OR Nkain3) OR Nkx2) OR Nlgn3) OR Nmb) OR Nmbr) OR Nmu) OR Nnat) OR Nog) OR Nomo1) OR Nos1) OR Notch1) OR Notch2) OR Nov) OR Nova1) OR Npc1) OR Npc2) OR Nptx1) OR Nptx2) OR Npy) OR Npy1r) OR Npy2r) OR Npy5r) OR Nr2f2) OR Nr4a1) OR Nrep) OR Nrgn) OR Nrip3) OR Nrp1) OR Nrtn) OR Nrxn2) OR Nsf) OR Nsg1) OR Nsmf) OR Ntn1) OR Ntng2) OR Ntrk1) OR Ntrk2) OR Ntrk3) OR Nts) OR Nudt2) OR Numb) OR Numbl) OR Odc1) OR Olfm1) OR Olfr734) OR Olig2) OR Oma1) OR Ophn1) OR Opn3) OR Opn4) OR Oprk1) OR Otof) OR Otx2) OR Oxt) OR Oxtr) OR P2rx7) OR Pacsin3) OR Pak1) OR Pard6a) OR Pcbd1) OR Pcdh2) OR Pcdh9) OR Pcnt) OR Pcp4) OR Pcsk9) OR Pde1b) OR Pde1c) OR Pdp1) OR Pdyn) OR Peg3) OR Penk) OR Per2) OR Pex5l) OR Pgrmc1) OR Phactr1) OR Phactr4) OR Phox2b) OR Pias3) OR Pik3r1) OR Pirt) OR Pkd1) OR Plagl1) OR Plcxd2) OR Pld3) OR Plekhg1) OR Plk2) OR Plk3) OR Plp1) OR Plxdc1) OR Plxna1) OR Plxnc1) OR Pmp22) OR Pnmt) OR Pnoc) OR Podxl2) OR Polr1d) OR Polr3e) OR Pomc) OR Pou2f1) OR Pou3f4) OR Ppfia4) OR Ppm1e) OR Ppp1ca) OR Ppp1r14c) OR Ppp1r16b) OR Ppp1r17) OR Ppp1r1a) OR Ppp1r1b) OR Ppp1r2) OR Ppp1r7) OR Ppp2r2a) OR Ppp4c) OR Ppp6c) OR Prkacb) OR Prkcd) OR Prkcq) OR Prmt2) OR Prnp) OR Prodh) OR Prok2) OR Prokr2) OR Prox1) OR Prss12) OR Prtg) OR Psen1) OR Psen2) OR Ptch2) OR Pten) OR Ptf1a) OR Ptgds) OR Ptn) OR Ptpn2) OR Ptpn5) OR Ptprf) OR Pus1) OR Pygb) OR Rab37) OR Rac1) OR Ramp3) OR Rap1a) OR Rasa3) OR Rasal1) OR Rasgrp1) OR Rasgrp2) OR Rasl11b) OR Rbp1) OR Rcan2) OR Rcn1) OR Rel) OR Rest) OR Rfng) OR Rgs12) OR Rgs16) OR Rgs2) OR Rgs3) OR Rgs4) OR Rgs5) OR Rgs8) OR Rgs9) OR Rhob) OR Rhou) OR Rif1) OR Rlbp1) OR Rnd1) OR Rnd2) OR Rnd3) OR Rorb) OR Rpl18) OR Rpl31) OR Rprm) OR Rraga) OR Rtn4rl1) OR Rubcn) OR Rufy3) OR Runx1) OR Rxfp3) OR S1) OR Satb2) OR Scg2) OR Scg3) OR Scn3b) OR Scrn1) OR Scrt1) OR Scube1) OR Scube2) OR Sdc3) OR Selenom) OR Selenow) OR Sema3a) OR Sema3b) OR Sema3c) OR Sema3e) OR Sema3f) OR Sema4a) OR Sema6d) OR Sema7a) OR Sept3) OR Sept6) OR Serf1) OR Serpina9) OR Serpini1) OR Sertm1) OR Sez6) OR Sez6l2) OR Sf1) OR Sfrp1) OR Sfrp2) OR Sfrp5) OR Sim1) OR Sirpa) OR Sirt2) OR Skil) OR Sla) OR Slc1) OR Slc12a5) OR Slc13a3) OR Slc17a6) OR Slc17a7) OR Slc18a2) OR Slc1a1) OR Slc1a2) OR Slc1a3) OR Slc1a6) OR Slc22a3) OR Slc25a12) OR Slc32a1) OR Slc33a1) OR Slc41a3) OR Slc6a1) OR Slc6a12) OR Slc6a2) OR Slc6a3) OR Slc6a6) OR Slc6a9) OR Slc7a14) OR Slc8a2) OR Slc9a3r1) OR Slit1) OR Slitrk2) OR Slitrk3) OR Slitrk4) OR Slitrk5) OR Slitrk6) OR Smad6) OR Smarce1) OR Smoc2) OR Snap25) OR Snap91) OR Sncg) OR Snhg11) OR Snx17) OR Sort1) OR Sox1) OR Sox11) OR Sox2) OR Sox4) OR Sox8) OR Sox9) OR Sp4) OR Sprn) OR Spry1) OR Sptan1) OR Sqle) OR Srgap3) OR Srsf7) OR Sstr1) OR Sstr2) OR St8sia5) OR Stard5) OR Stau1) OR Strip2) OR Strn) OR Stum) OR Stx1a) OR Sufu) OR Sulf2) OR Sun2) OR Suv39h1) OR Sv2a) OR Sv2b) OR Syndig1l) OR Syngr3) OR Synj2) OR Syt13) OR Syt17) OR Syt2) OR Syt3) OR Syt4) OR Syt6) OR Syt7) OR Tac1) OR Tac2) OR Tacr3) OR Taf13) OR Tagln3) OR Tbc1d8) OR Tcf3) OR Tgif1) OR Thbs1) OR Thbs2) OR Thbs3) OR Thbs4) OR Them6) OR Thra) OR Thrsp) OR Tigar) OR Tle1) OR Tle3) OR Tmeff1) OR Tmem35a) OR Tmem59l) OR Tnc) OR Tor1b) OR Tpbg) OR Tpd52l1) OR Tph2) OR Tppp3) OR Traf4) OR Trappc3) OR Trf) OR Trh) OR Trhr) OR Trib2) OR Tsc22d2) OR Tspan14) OR Tspan7) OR Tuba1b) OR Tubb3) OR Tubb4a) OR Ube3a) OR Ubxn11) OR Uchl1) OR Ucp2) OR Uhmk1) OR Uncx) OR Uso1) OR Vat1) OR Vcan) OR Vdac2) OR Vegfa) OR Vim) OR Vip) OR Vipr2) OR Vldlr) OR Vmn1r2) OR Vsnl1) OR Vsx2) OR Washc2) OR Wdr46) OR Wfs1) OR Wif1) OR Wnt2b) OR Wnt5b) OR Wnt7a) OR Wnt8b) OR Wrb) OR Wscd1) OR Wwc1) OR Ypel4) OR Zbtb18) OR Zbtb2) OR Zcchc12) OR Zfp5) OR Zfp532) OR Zic1) OR Zic2) OR Zic3) OR Zic4) OR Zic5) OR Zwint) AND olfactory bulb)


As far as I can tell, this does not surpass any character limits on Pubmed.