Daijiang Li
Daijiang Li

Reputation: 697

grep in shell does not work as expected

I am trying to search text from one file (named as temporal3) in another file (names as map) using shell's grep function. Here is an small part of these files:

temporal3:

TACTATATTACTGGAAAAACCATCAAGCTAGACCA
AATATGTCCCAGTTGAAGAGAATTATCATTTTGAG
AGAATTATCATTTTGAGATTGCTATCGTTCACCAA
AATATGTCCCAGTTGAAGAGAATTATCATTTTGAG
CTAGACCAATATAATATGTCCCAGTTGAAGAGAAT
AGATTGCTATCGTTCACCAAATACTGGCAAATAAT

map:

CTTCTGAATCCGCCAGGAGTTCTACCTCGATCAAATAATGACACTTTGCACTTGATTTTTCATCAAGAAAGTCAGTCAAATAGTTCCAGAAATGGACACAA
ATCTCACATCCCTTACTATATTACTGGAAAAACCATCAAGCTAGACCAATATAATATATCCCAGTTGAAGAGAATTATCATTTTGAGATTGCTATCGTTCA
TCACATCCCTTACTATATTACTGGAAAAACCATCAAGCTAGACCAATATAATATGTCCCAGTTGAAGAGAATTATCATTTTGAGATTGCTATCGTTCACCA
AGACCAATATAATATGTCCCAGTTGAAGAGAATTATCATTTTGAGATTGCTATCGTTCACCAAATACTGGCAAATAATCTCCTTCTGAATCCGCCAGGAGT
CCAGTTGAAGAGAATTATCATTTTGAGATTGCTATCGTTCACCAAATACTGGCAAATAATCTCCTTCTGAATCCGCCAGGAGTTCTACCTCGATCAAATAA
GAGATTCATCTCACATCCCTTACTATATTACTGGAAAAACCATCAAGCTAGACCAATATAATATGTCCCAGTTGAAGAGAATTATCATTTTGAGATTGCTA
AGACCAATATAATATGTCCCAGTTGAAGAGAATTATCATTTTGAGATTGCTATCGTTCACCAAATACTGGCAAATAATCTCCTTCTGAATCCGCCAGGAGT
AACCATCAAGCTAGACCAATATAATATGTCCCAGTTGAAGAGAATTATCATTTTGAGATTGCTATCGTTCACCAAATACTGGCAAATAATCTCCTTCTGAA
TTCATCTCACATCCCTTACTATATTACTGGAAAAACCATCAAGCTAGACCAATATAATATGTCCCAGTTGAAGAGAATTATCATTTTGAGATTGCTATCGT
ATAGCGAGATTCATCTCGCATCCCTTACTATATTACTGGAAAAACCATCAAGCTAGACCAATATAATATGTCCCAGTTGAAGAGAATTATCATTTTGAGAT

The real map file is a hugh one (~20Gb) so I cannot handle it with R. What I want to do is:

  1. For the first line in temporal3, I want to get all lines in map that contain it.
  2. For the second line in temporal3, I want to get all lines in map that contain it.
  3. ...
  4. For the last line in temporal3, I want to get all lines in map that contain it.

I tried grep -Ff temporal3 map but it did not work! This is really surprising for me. Any idea about why this does not work? Any suggestions to get this task done? Many thanks!

Upvotes: 2

Views: 160

Answers (2)

Daijiang Li
Daijiang Li

Reputation: 697

Thanks @anubhava ! This is what I want. I also changed it a little bit:

 #!/bin/bash

 > output
 while read -r line; do
     echo $line >> output
     grep -Fn "$line" map >> output
 done < temporal3

Upvotes: 1

anubhava
anubhava

Reputation: 784878

You can use:

#!/bin/bash

> output
while read -r line; do
    grep -F "$line" map >> output
done < temporal3

Upvotes: 1

Related Questions