Regex para combinar “uma cadeia de comprimento menor que X reside entre dois” “símbolos”

1

O texto tem este formulário:

>xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxx

>xxxxxxxxxxxxxx

xxxxxxxxxxx

>

Eu preciso de regex para corresponder a todos os >xxx... se houver menos do que, digamos, uma quantidade de 100% de x entre os símbolos > . Como posso fazer isso?

O problema real é: "smalt.c: 334 ERRO: seqüência muito curta para ser fragmentada" ao tentar indexar o arquivo fasta com sequências de referência de vários vírus. Funcionou antes, quando apenas sequências mais longas estavam presentes no arquivo.

Eu não encontrei uma solução para o erro smalt (e mesmo se eu preferir, prefiro executá-lo primeiro com configurações padrão), então

Eu preciso remover todas as sequências de referência mais curtas do arquivo de referência.

    
por moomox 01.12.2015 / 14:36

1 resposta

1

você pode usar grep para fornecer apenas as partes do arquivo com mais de 100 caracteres entre > e gravar os resultados em um novo arquivo (que deve funcionar com o fasta):

grep -Pzo '>[^>]{100,}' fasta.txt > fasta_wo_short_genes.txt

explicação:

  • -P diz ao grep para aceitar expressões regulares pérolas (por algum motivo, eu não consegui fazê-lo funcionar com expressões regulares comuns do grep)
  • z diz ao grep para ver o arquivo inteiro como uma grande linha
  • o diz ao grep para produzir apenas as partes correspondentes (caso contrário, por causa do z , o resultado sempre será o resultado do arquivo inteiro se encontrar alguma correspondência)

a expressão regular:

  • > o caractere que separa suas seqüências de genes de vírus
  • [^>] corresponde a qualquer caractere, exceto >
  • {100,} corresponde a 100 ou mais repetições da expressão anterior (neste caso [^>] )
por 01.12.2015 / 15:54