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.