Você deseja remover todas as novas linhas das linhas que não iniciam com o caractere de cabeçalho fasta >
.
awk '/^[>;]/ { if (seq) { print seq }; seq=""; print } /^[^>;]/ { seq = seq $0 } END { print seq }' data.fa
O script Awk é
/^[>;]/ { if (seq) { print seq }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END { print seq }
... que fará três coisas diferentes dependendo do que encontrar no arquivo.
- Uma linha de cabeçalho fasta (linha começando com
>
) ou uma linha de comentário rápido (linha começando com;
): Imprime qualquer sequência que tenhamos lembrado emseq
se houver alguma (isso pertence ao cabeçalho anterior). Limpe a sequência lembrada. Imprima a linha atual (o cabeçalho ou o comentário). - Uma linha fasta sem cabeçalho (e sem comentário): concatene a sequência lembrada com a sequência na linha. Isso removerá efetivamente as novas linhas.
- O final do arquivo: imprima a sequência. Esta é a sequência associada ao último cabeçalho no arquivo.
Se você quiser fazer uma impressão bonita da sequência, por exemplo, limitar a 60 caracteres por linha:
#!/usr/bin/awk -f
function pretty(s) {
p = "";
n = 1;
while (n < length(s)) {
p = (p ? p "\n" : "") substr(s, n, 60);
n += 60;
}
return p;
}
/^[>;]/ { if (seq) { print pretty(seq) }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END { print pretty(seq) }
Coloque isso em prettyfasta.awk
e torne-o executável ( chmod +x prettyfasta.awk
) e, em seguida, execute-o:
$ ./prettyfasta.awk data.fa