Answers.Body: <p>You can simply use grep for this purpose as shown below,</p>
  
  <pre><code>grep -v /translation bio.txt | grep -B100000000 /db_xref= &gt; output_file.txt
  </code></pre>
  
  <p>Just make sure that you keep the number with B bigger than the number of lines of your file.</p>
  
  <p>If you print the contents of the above file you get your desired output as given below,</p>
  
  <pre><code>:~$ cat output_file.txt 
  gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
  </code></pre>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-12T17:54:36.220Z
Answers.LastActivityDate: 2020-06-12T17:54:36.220Z
Answers.UserDisplayName: Ammar Sabir Cheema
Answers.Body: <p>You can do this very easily with <code>awk</code>:</p>
  
  <pre><code>$ awk '/^ {5}\w/{a=1} /\/translation/{a=0}a' file.gb 
       gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
  </code></pre>
  
  <p>The idea here is to set <code>a</code> to <code>1</code> if this line starts with 5 spaces followed by a word character. Then, we set <code>a</code> back to <code>0</code> if this line matches <code>/translation</code>. The default action for <code>awk</code> when an expression evaluates to true (not 0) is to print, therefore the final <code>a</code> will cause all lines read while <code>a</code> is not 0 to be printed, effectively removing everything after each <code>/translation</code> line.</p>
  
  <p>A more easily understandable version of the same code would be:</p>
  
  <pre><code>awk '{ 
          if(/^ {5}\w/){
              a=1
          }
          if(/\/translation/){
              a=0
          }
          if(a==1){
              print
          }
      }' file.gb 
  </code></pre>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-14T13:50:57.070Z
Answers.Text: @karel it prints `/db_xref="GI:219870283"` but not `/db_xref="GeneID:7278620"`.
Answers.UserDisplayName: terdon
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-14T13:59:01.640Z
Answers.Text: @karel see update. Awk to the rescue!
Answers.UserDisplayName: terdon
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-14T13:39:26.093Z
Answers.LastActivityDate: 2020-06-14T13:58:48.740Z
Answers.LastEditDate: 2020-06-14T13:58:48.740Z
Answers.UserDisplayName: terdon
Body: <p>Basically a GenBank file consists of gene entries (announced by 'gene') followed by its corresponding 'CDS' entry (only one per gene) like the two shown here below. I would like to extract part of the data from the input file shown below according to the following rules and print it in the terminal. </p>
  
  <ul>
  <li><p>There are two blocks of gene data shown below. I want to extract part of both blocks. </p></li>
  <li><p>The extracted text for each block starts with a line that contains spaces at the beginning of the line followed by <code>gene</code> </p></li>
  <li><p>The extracted text for each block ends with a line that contains <code>/db_xref="GeneID</code></p></li>
  <li><p>The perl and awk tags are just suggestions. An answer can use a different program(s).</p></li>
  </ul>
  
  <p>Input file (source: <a href="https://stackoverflow.com/q/21888945">biotech</a>):</p>
  
  <pre class="lang-none prettyprint-override"><code>     gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
                       /translation="MYYKALAHFLPTLSTMQNILSKSPLSLDFRLLFLAFIDKR"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
                       /translation="MQTVNVDVAIVGAGGGGLRAAIAAAEANPNLKIALISKVYPMRS
                       HTVAAEGGAAAVAKEEDSYDKHFHDTVAGGDWLCEQDVVEYFVEHSPVEMTQLERWGC
                       PWSRKADGDVNVRRFGGMKIERTWFAADKTGFHLLHTLFQTSIKYPQIIRFDEHFVVD
                       ILVDDGQVRGCVAMNMMEGTFVQINANAVVIATGGGCRAYRFNTNGGIVTGDGLSMAY
                       RHGVPLRDMEFVQYHPTGLPNTGILMTEGCRGEGGILVNKDGYRYLQDYGLGPETPVG
                       KPENKYMELGPRDKVSQAFWQEWRKGNTLKTAKGVDVVHLDLRHLGEKYLHERLPFIC
                       ELAQAYEGVDPAKAPIPVRPVVHYTMGGIEVDQHAETCIKGLFAVGECASSGLHGANR
                       LGSNSLAELVVFGKVAGEMAAKRAVEATARNQAVIDAQAKDVLERVYALARQEGEESW
                       SQIRNEMGDSMEEGCGIYRTQESMEKTVAKIAELKERYKRIKVKDSSSVFNTDLLYKI
                       ELGYILDVAQSISSSAVERKESRGAHQRLDYVERDDVNYLKHTLAFYNADGTPTIKYS
                       DVKITKSQPAKRVYGAEAEAQEAAAKKE"
  </code></pre>
  
  <p>Desired output:</p>
  
  <pre class="lang-none prettyprint-override"><code>     gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
  </code></pre>
  
  <p>I tried using <code>pcregrep --multiline .*'START-SEARCH-TERM.*(\n|.)*END-SEARCH-TERM' path/to/SOURCE-FILE</code>. I installed pcregrep (grep utility that uses Perl-style regexps) in Ubuntu with <code>sudo apt install pcregrep</code>. I also installed Biopython with <code>sudo apt install python3-biopython</code> and ran the Simple GenBank parsing example from <em>Biopython Tutorial and Cookbook</em>.</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-03-05T23:04:13.000Z
Comments.Text: I would strongly suggest simply using biopython, bioruby or biojulia etc. These libraries are really good for extracting data from genbank files. You tagged perl, [bioperl](https://bioperl.org/) can definitely do it, but Perl is a dying language and bioperl is not straightforward to install IIRC from 10 years ago —but worth a try.
Comments.UserDisplayName: Matteo Ferla
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-06-14T13:52:01.737Z
Comments.Text: @MatteoFerla take that back! Just because young whippersnappers today don't appreciate the power and beauty of Perl does not make it a dying language! Them's fighting words! :P
Comments.UserDisplayName: terdon
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-06-14T18:30:49.450Z
Comments.Text: Yeah agreed, code is code. Two things will continue Perl in any age, regex and Perl one liners (definitely stylish). Have you ever heard of a Python one-lliner?
Comments.UserDisplayName: M__
Tags: <python><text-processing><genbank>
Title: Parsing a GenBank file with multiple gene entries
ThreadText: # Parsing a GenBank file with multiple gene entries
  
  (Asked by: username_0 on 2020-03-05)
  
  Basically a GenBank file consists of gene entries (announced by 'gene') followed by its corresponding 'CDS' entry (only one per gene) like the two shown here below. I would like to extract part of the data from the input file shown below according to the following rules and print it in the terminal.
  
  * There are two blocks of gene data shown below. I want to extract part of both blocks.
  * The extracted text for each block starts with a line that contains spaces at the beginning of the line followed by `gene`
  * The extracted text for each block ends with a line that contains `/db_xref="GeneID`
  * The perl and awk tags are just suggestions. An answer can use a different program(s).
  
  Input file (source: [biotech](https://stackoverflow.com/q/21888945)):
  
  ```none
       gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
                       /translation="MYYKALAHFLPTLSTMQNILSKSPLSLDFRLLFLAFIDKR"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
                       /translation="MQTVNVDVAIVGAGGGGLRAAIAAAEANPNLKIALISKVYPMRS
                       HTVAAEGGAAAVAKEEDSYDKHFHDTVAGGDWLCEQDVVEYFVEHSPVEMTQLERWGC
                       PWSRKADGDVNVRRFGGMKIERTWFAADKTGFHLLHTLFQTSIKYPQIIRFDEHFVVD
                       ILVDDGQVRGCVAMNMMEGTFVQINANAVVIATGGGCRAYRFNTNGGIVTGDGLSMAY
                       RHGVPLRDMEFVQYHPTGLPNTGILMTEGCRGEGGILVNKDGYRYLQDYGLGPETPVG
                       KPENKYMELGPRDKVSQAFWQEWRKGNTLKTAKGVDVVHLDLRHLGEKYLHERLPFIC
                       ELAQAYEGVDPAKAPIPVRPVVHYTMGGIEVDQHAETCIKGLFAVGECASSGLHGANR
                       LGSNSLAELVVFGKVAGEMAAKRAVEATARNQAVIDAQAKDVLERVYALARQEGEESW
                       SQIRNEMGDSMEEGCGIYRTQESMEKTVAKIAELKERYKRIKVKDSSSVFNTDLLYKI
                       ELGYILDVAQSISSSAVERKESRGAHQRLDYVERDDVNYLKHTLAFYNADGTPTIKYS
                       DVKITKSQPAKRVYGAEAEAQEAAAKKE"
  
  ```
  
  Desired output:
  
  ```none
       gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
  
  ```
  
  I tried using `pcregrep --multiline .*'START-SEARCH-TERM.*(\n|.)*END-SEARCH-TERM' path/to/SOURCE-FILE`. I installed pcregrep (grep utility that uses Perl-style regexps) in Ubuntu with `sudo apt install pcregrep`. I also installed Biopython with `sudo apt install python3-biopython` and ran the Simple GenBank parsing example from *Biopython Tutorial and Cookbook*.
  
  **Tags:** python, text-processing, genbank
  
  > **Comments:**
  > **username_1**: I would strongly suggest simply using biopython, bioruby or biojulia etc. These libraries are really good for extracting data from genbank files. You tagged perl, [bioperl](https://bioperl.org/) can definitely do it, but Perl is a dying language and bioperl is not straightforward to install IIRC from 10 years ago —but worth a try.  
  > **username_2**: @username_1 take that back! Just because young whippersnappers today don't appreciate the power and beauty of Perl does not make it a dying language! Them's fighting words! :P  
  > **username_3**: Yeah agreed, code is code. Two things will continue Perl in any age, regex and Perl one liners (definitely stylish). Have you ever heard of a Python one-lliner?  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_4 on 2020-06-12. Score: 1 | Accepted answer
  
  You can simply use grep for this purpose as shown below,
  
  ```
  grep -v /translation bio.txt | grep -B100000000 /db_xref= > output_file.txt
  
  ```
  
  Just make sure that you keep the number with B bigger than the number of lines of your file.
  
  If you print the contents of the above file you get your desired output as given below,
  
  ```
  :~$ cat output_file.txt 
  gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
  
  ```
  
  
  ---
  
  ### Answer by username_2 on 2020-06-14. Score: 1
  
  You can do this very easily with `awk`:
  
  ```
  $ awk '/^ {5}\w/{a=1} /\/translation/{a=0}a' file.gb 
       gene            complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /db_xref="GeneID:7278619"
       CDS             complement(8972..9094)
                       /locus_tag="HAPS_0004"
                       /codon_start=1
                       /transl_table=11
                       /product="hypothetical protein"
                       /protein_id="YP_002474657.1"
                       /db_xref="GI:219870282"
                       /db_xref="GeneID:7278619"
       gene            9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /db_xref="GeneID:7278620"
       CDS             9632..11416
                       /gene="frdA"
                       /locus_tag="HAPS_0005"
                       /note="part of four member fumarate reductase enzyme
                       complex FrdABCD which catalyzes the reduction of fumarate
                       to succinate during anaerobic respiration; FrdAB are the
                       catalytic subcomplex consisting of a flavoprotein subunit
                       and an iron-sulfur subunit, respectively; FrdCD are the
                       membrane components which interact with quinone and are
                       involved in electron transfer; the catalytic subunits are
                       similar to succinate dehydrogenase SdhAB"
                       /codon_start=1
                       /transl_table=11
                       /product="fumarate reductase flavoprotein subunit"
                       /protein_id="YP_002474658.1"
                       /db_xref="GI:219870283"
                       /db_xref="GeneID:7278620"
  
  ```
  
  The idea here is to set `a` to `1` if this line starts with 5 spaces followed by a word character. Then, we set `a` back to `0` if this line matches `/translation`. The default action for `awk` when an expression evaluates to true (not 0) is to print, therefore the final `a` will cause all lines read while `a` is not 0 to be printed, effectively removing everything after each `/translation` line.
  
  A more easily understandable version of the same code would be:
  
  ```
  awk '{ 
          if(/^ {5}\w/){
              a=1
          }
          if(/\/translation/){
              a=0
          }
          if(a==1){
              print
          }
      }' file.gb 
  
  ```
  
  > **Comments:**
  > **username_2**: @username_0 it prints `/db_xref="GI:219870283"` but not `/db_xref="GeneID:7278620"`.  
  > **username_2**: @username_0 see update. Awk to the rescue!  
  
  ---
  
  