Retorna o número de ocorrências de ATG
em cada linha:
awk -F'ATG' 'NF{print NF-1}' testfile
Isso funciona para arquivos com uma ou várias linhas.
Exemplo 1
Considere este arquivo de teste:
$ cat testfile
xxATGxxATG
ATGxxxATGxxx
xxATGxxxxATGxxATGxx
O código conta corretamente as ocorrências de ATG:
$ awk -F'ATG' 'NF{print NF-1}' testfile
2
2
3
Exemplo 2
Usando o exemplo na versão atual da pergunta:
$ cat >file1
ATGTGGATGGTGGGTTACAATGAAGGTGGTGAGTTCAACATGGCTGATTATCCATTCAGTGGAAGGAAACTAAGGCCTCTCATTCCAAGACCAGTCCCAGTCCCTACTACTTCTCCTAACAGCACTTCAACTATAACTCCTTCCTTAAACCGCATTCATGGTGGCAATGATTTATTTTCACAATATCATCACAATCTGCAGCAGCAAGCATCAGTAGGAGATCATAGCAAGAGATCAGAGTTGAATAATAATAATAATCCATCTGCAGCAGTTGTGGTGAGTTCAAGATGGAATCCAACACCAGAACAGTTAAGAGCACTGGAAGAATTGTATAGAAGAGGAACAAGAACACCTTCTGCTGAGCAAATCCAACAAATAACTGCCCAGCTTAGAAAATTTGGAAAAATTGAAGGCAAAAATGTTTTCTATTGGTTTCAGAATCACAAAGCCAGAGAAAGGCAAAAACGACGGCGTCAAATGGAATCAGCAGCTGCTGAGTTTGATTCTGCTATTGAAAAGAAAGACTTAGGCGCAAGTAGG
ACAGTGTTTGAAGTTGAACACACTAAAAACTGGCTACCATCTACAAATTCCAGTACCAGTACTCTTCATCTTGCAGAGGAATCTGTTTCAATTCAAAGGTCAGCAGCAGCAAAAGCAGATGGATGGCTCCAATTCGATGAAGCAGAATTACAGCAAAGAAGAAACTTTATGGAAAGGAATGCCACGTGGCATATGATGCAGTTAACTTCTTCTTGTCCTACAGCTAGCATGTCCACCACAACCACAGTAACAACTAGACTTATGGACCCAAAACTCATCAAGACCCATGAACTCAACTTATTCATTTCACCTCACACATACAAAGAAAGAGAAAACGCTTTTATCCACTTAAATACTAGTAGTACTCATCAAAATGAATCTGATCAAACCCTTCAACTTTTCCCAATAAGGAATGGAGATCATGGATGCACTGATCATCATCATCATCATCATAACATTATCAAAGAGACACAGATATCAGCTTCAGCAATCAATGCACCCAACCAGTTTATTGAGTTTCTTCCCTTGAAAAACTGA
Isso resulta em:
$ awk -F'ATG' 'NF{print NF-1}' file1
9
15
Como funciona
o awk implicitamente percorre todas as linhas de um arquivo. Cada linha é dividida em campos.
-
-F'ATG'
Isso diz ao awk para usar
ATG
como o separador de campo. -
NF{print NF-1}
Para cada linha não vazia, isso indica ao awk para imprimir o número de campos menos 1.
(Nas linhas vazias, o número de campos,
NF
, é zero. Portanto, a condiçãoNF
é avaliada como falsa nessas linhas, efetivamente pulando sobre elas.)