Everything that follows is on RHEL.
to count a specific motif in a FASTA file
Is that a strict match or are you going to allow for one or more errors?
Now, everything would be fine if not that these approaches give different results
Perhaps the issue in your case is line endings (unix/windows). Have you tried dos2unix?
When using a simple test file (below, with some sequences split on multiple lines deliberately ) I get the same answer for both option 1 and 2 and seqkit.
$ more motif.fa
>test_1
AGCTAGTGGATATATGGACCTGTTTGGATGCTCGCTAGC
>test_2
AGCTAGCTAGCTAGCTACGCTACGACTACGAT
>test_3
TGGATATATGGACCTGTTTGAGCTTTAGCTAGCTGGACT
CGCTAGCTAGACTGC
>test_4
GCGCTAGCTAGCTAGAGCTACGATTAGCTAGTC
>test_5
GAGCTAGCATCGACTTACGACTACGATCGACTAGCATCGACTACGGGCGC
CGATAGCTACGCTGGATATATGGACCTGTTTGGCTAGCTAGCGAC
CGATGATTATCTCTCTAC
With option 1:
$ grep -c TGGATATATGGACCTGTTTG motif.fa
3
With option 2:
$ grep -o TGGATATATGGACCTGTTTG motif.fa | wc -l
3
Another interesting grep option that you can try :
$ grep -n -C 2 TGGATATATGGACCTGTTTG motif.fa
Finally with seqkit I get the same answer.
$ seqkit locate -i -d -p TGGATATATGGACCTGTTTG -j 40 motif.fa
seqID patternName pattern strand start end matched
test_1 TGGATATATGGACCTGTTTG TGGATATATGGACCTGTTTG + 7 26 TGGATATATGGACCTGTTTG
test_3 TGGATATATGGACCTGTTTG TGGATATATGGACCTGTTTG + 1 20 TGGATATATGGACCTGTTTG
test_5 TGGATATATGGACCTGTTTG TGGATATATGGACCTGTTTG + 63 82 TGGATATATGGACCTGTTTG
With bbduk.sh from BBMap suite for fun (converting the motif into lower case characters):
$ bbduk.sh -Xmx4g in=motif.fa out=stdout.fa literal=TGGATATATGGACCTGTTTG k=7 kmask=lc
generates
Allocating kmer table: 0.023 seconds.
Initial:
Memory: max=4116m, total=4116m, free=3922m, used=194m
Added 14 kmers; time: 0.002 seconds.
Memory: max=4116m, total=4116m, free=3837m, used=279m
Input is being processed as unpaired
Started output streams: 0.013 seconds.
>test_1
AGCTAGtggatatatggacctgtttgGATGCTCGCTAGC
>test_2
AGCTAGCTAGCTAGCTACGCTACGACTACGAT
>test_3
tggatatatggacctgtttgAGCTTTAGCTAGCTGGACTCGCTAGCTAGACTGC
>test_4
GCGCTAGCTAGCTAGAGCTACGATTAGCTAGTC
>test_5
GAGCTAGCATCGACTTACGACTACGATCGACTAGCATCGACTACGGGCGCCGATAGCTACGCtggatata
tggacctgtttgGCTAGCTAGCGACCGATGATTATCTCTCTAC
Processing time: 0.012 seconds.
Input: 5 reads 271 bases.
KMasked: 3 reads (60.00%) 60 bases (22.14%)
Total Removed: 0 reads (0.00%) 0 bases (0.00%)
Result: 5 reads (100.00%) 271 bases (100.00%)
as Istvan Albert also pointed out:
Be VERY careful when using grep to do (biological) pattern matching!!
If you file is block-formatted any pattern that spans multiple lines will be missed. So always make sure your fasta file is single line formatted before running grep or use more dedicated tools to avoid this issue.