A maneira mais simples é simplesmente imprimir a primeira linha e depois todas as outras linhas do arquivo que não contiverem i) nenhum caractere de espaços (eles não precisam estar em arquivos fasta) e ii) uma linha de cabeçalho fasta ( >
):
head -n 1 file.fa > newfile.fa; grep -P '^[^> ]+$' >> newfile.fa
O head
imprime a 1ª linha e a expressão regular grep procura todas as linhas que contenham apenas caracteres não >
e não espaciais ( [^> ]
) desde o início ( ^
) até o final ( $
) da linha.
No entanto, isso resultará em um arquivo como este:
>1
AAATTTTGGGGCCC
ACCCCGGGTTT
ATGCCCCCCCCCC
Para obter a sequência inteira na mesma linha, use isso:
head -n 1 file.fa > newfile.fa; grep -P '^[^> ]+$' | tr -d '\n'>> newfile.fa;
Você pode adicionar uma nova linha extra ao final do arquivo com
echo "" >> newfile.fa
No entanto, se você estiver trabalhando com esses arquivos, sugiro que salve esses dois scripts em um arquivo em seu $ PATH ( $HOME/bin
, por exemplo) e torne-os executáveis ( chmod a+x $HOME/bin/scriptname
):
FastaToTbl
Este script pega um arquivo fasta e o muda para o formato tbl (o cabeçalho fasta, uma aba e depois a sequência, tudo em uma linha):
#! /bin/sh
gawk '{
if (substr($1,1,1)==">")
if (NR>1)
printf "\n%s\t", substr($0,2,length($0)-1)
else
printf "%s\t", substr($0,2,length($0)-1)
else
printf "%s", $0
}END{printf "\n"}' "$@"
TblToFasta
Isso faz o inverso, pega um arquivo no formato tbl e o converte em um arquivo fasta correto ( >
header e 60 caracteres por linha):
#! /bin/sh
gawk '{
sequence=$NF
ls = length(sequence)
is = 1
fld = 1
# if (fld == 1){printf ">"}
while (fld < NF)
{
if (fld == 1){printf ">"}
printf "%s " , $fld
if (fld == NF-1)
{
printf "\n"
}
fld = fld+1
}
while (is <= ls)
{
printf "%s\n", substr(sequence,is,60)
is=is+60
}
}' "$@"
Agora, se você tivesse esses scripts disponíveis, poderia ter feito o que pediu simplesmente executando:
$ head -n 1 file.fa; FastaToTbl file.fa | awk -F"\t" '{print $2}'
>1
AAATTTTGGGGCCC
ACCCCGGGTTT..........
ATGCCCCCCCCCC
Ou, para obter um arquivo fasta correto:
$ head -n 1 file.fa > newfile; FastaToTbl file.fa |
awk -F"\t" '{printf "%s", $2}' | TblToFasta >> newfile
Que produz:
>1
AAATTTTGGGGCCCACCCCGGGTTT..........ATGCCCCCCCCCC