Isso imprimirá as primeiras 10 linhas que corresponderem a qualquer uma das suas strings:
grep -m 10 -Ff motifs sequence.fa
Este lerá cada motivo e imprimirá as dez primeiras linhas que o math, então ele imprimirá 10 linhas para cada motivo:
while read mot; do grep -m 10 "$mot" sequence.fa; done < motifs
No entanto, parece uma sequência de DNA, o que significa que as quebras de linha são completamente arbitrárias e você pode ter correspondências assim:
ACTG GA
GA
Com essas abordagens, o GAGA
acima não será contado como uma correspondência e provavelmente não é o que você deseja. Em vez disso, sugiro que você coloque tudo em uma única linha antes de pesquisar. Já que você está pedindo linhas correspondentes, eu suponho que você queira cada um desses motivos em seu contexto. Então, para fazer isso corretamente, combinando motivos que são divididos em novas linhas, primeiro transforme seu arquivo em TBL . Eu tenho usado o mesmo pequeno script awk
escrito por um colega (obrigado Pep) por anos:
#!/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"}' "$@"
Salve o script acima como FastaToTbl
em algum lugar no seu $PATH
( /usr/local/bin
por exemplo) e torne-o executável ( chmod a+x /usr/local/bin/FastaToTbl
). Então, você pode simplesmente canalizar sequências de formato FASTA e imprimirá .tbl
format, onde o identificador e a sequência estão todos na mesma linha.
Então, quando você tiver o FastaToTbl
configurado, poderá executar:
while read mot;
do
FastaToTbl sequence.fa | grep -Po ".{10}$mot.{10}" | head -n 10
done < motifs
As opções acima darão as 10 primeiras correspondências para cada padrão e também corresponderão a motivos divididos em novas linhas. Ele também imprimirá os 10 caracteres de cada lado do padrão correspondente, alterará o {10}
para outro número para controlar esse comportamento.