Grep e AWK para análises de saídas de BLAST
Para saber quantas seqüências há em uma biblioteca de seqüências em formato fasta:
$grep ">" nome_arquivo -c
BLAST saída normal
Para saber quantas seqüências foram usadas como Query em uma pesquisa BLAST com saída normal:
$grep "Query=" nome_arquivo -c
Para saber, das seqüências acima, quantas deram hit:
$grep "Sequences producing" nome_arquivo -c
Agora, para saber quantas não deram hit:
$grep "No hit" nome_arquivo -c
Para selecionar quais deram hit, é preciso fazer o "grep do grep", pegando as linhas de cima de "Sequences producing" e depois buscar pelo "Query=", assim:
$grep "Sequences producing" -B 11 | grep "Query=" | more
Para selecionar quais não deram hit, é igual, pegando as linhas de cima de "No hits" e depois buscando pelo "Query=", assim:
$grep "No hits" -B 9 | grep "Query=" | more
BLAST saída m 8
Só são mostrados os hits e cada query aparece em várias linhas, portanto para saber quantas seqüências query deram hit e quais são elas:
$cat nome_arquivo | awk '{print $1}' | sort | uniq -c
Para saber quantas seqüências subject foram selecionadas com a biblioteca query utilizada e quais são elas:
$cat nome_arquivo | awk '{print $2}' | sort | uniq -c
Para determinar o número de no hits é preciso contar o número de seqüências na biblioteca fasta com grep ">" e subtrair o número de hits:
$grep arquivo_biblioteca ">"
Às vezes o BLAST foi feito com um cutoff de valor de "e" não muito exigente e agora se quer selecionar somente os hits com similaridade auperior a 96% (coluna 3 da saída m 8). Para isso e analisar os hits use:$cat nome_arquivo | awk '$3 > 96 {print $1}' | uniq -c | more
Veja que é possível usar "cat" para carregar o arquivo e depois usar "awk", mas também pode-se escrever:
$ awk '$3 > 96 {print $1}' nome_arquivo | uniq -c | more
Que o resultado é o mesmo. Assim como:
$grep ">" nome_arquivo - também poderia ser - $cat nome_arquivo | grep ">"
No awk, é possível exigir uma condição (logo depois da primeira das aspas simples) e executar uma ação (entre as chaves).
Portando, no exemplo acima, awk '$3 > 96 {print $1}' nome_arquivo, é mostrada a coluna 1 de todas as linhas onde a coluna 3 é maior que 96.
Uma maneira de ordenar o resultado com saída m 8 por valor de similaridade decrescente é usando sort:
$sort -k 3,3 -n -r
Isso classifica o resultado pela coluna 3 (início em 3, fim em 3, logo -k 3,3)
Trata os elementos da coluna 3 como números e não como "string" de texto (logo, -n)
E classifica do maior para o menor (logo, -r)