Eu verifiquei os diferentes tópicos, mas não consegui encontrar uma solução para o meu problema. Eu tenho um arquivo contendo uma seqüência de letras A, T, C, G (representando seqüências de DNA) da seguinte forma:
$ cat species_gene
>genus_1_species_1
TTGGATATTGAGTTACATACATATGATTTGGGAATGGAGAACCGAGATAAGACTGAAGATCAAGTCACAATTGATTGTGC
TAATGCTGTCAAGAAATACAATGTCGGCATCAAATGTGCAACTATTACTCCTGATGAAAATCGAGTTGAGGAGTTCAAGC
>tribe_1_species_1
CTGGATATAGAGTTGCACACATACGATCTGGGAATGGAAAACCGCGACAAGACTGATGACCAAGTCACAATCGATTGCGC
CAACGCGATTAAAAAATACAACGTTGGAATTAAGTGCGCGACCATCACTCCCGACGAGAAGAGAGTCGAGGAATTCAAGC
>species_2
CTTGATATTGAACTACACACCTATGATTTGGGAATGGAATACCGCGATAAAACTGATGACCAAGTCACAATTGACTGCGC
KAATGCTATTAAGAAATACAATGTTGGTATTAAGTGCGCTACCATAACTCCAGATGAAAAAAGAGTTGAAGAATTCAAAC
Eu gostaria de contar o número de letras nas strings após o cabeçalho "> genus_1_species_1" até o próximo cabeçalho. Nesse caso, o comprimento das seguintes seqüências de caracteres, igual a 160:
TTGGATATTGAGTTACATACATATGATTTGGGAATGGAGAACCGAGATAAGACTGAAGATCAAGTCACAATTGATTGTGC
TAATGCTGTCAAGAAATACAATGTCGGCATCAAATGTGCAACTATTACTCCTGATGAAAATCGAGTTGAGGAGTTCAAGC
Eu gostaria de usar o awk e usar ">" como Separador de Registros e quebras de linha como Separador de Campo e, subsequentemente, conta o número de campos (ou seja, linhas), iniciando a partir da segunda linha do registro.
Eu usei o seguinte comando:
$ awk 'BEGIN {RS=">"} NR==2 {print length}' species_gene
Eu obtive 180 (o número de caracteres do primeiro registro). A saída que eu gostaria de obter é 160 (o comprimento do primeiro registro, a partir da segunda linha). Eu tentei o seguinte para descartar o cabeçalho:
$ awk 'BEGIN {RS=">"; FS="\n"} NR==2 {if (NF!=1) {length}}' species_gene
Há algo que eu não entendo aqui e ficaria feliz se alguém pudesse me ajudar.