Para obter todos os codons completos de um único arquivo:
{
for (pos = 1; pos < length - 1; ++pos) {
codon = substr($0, pos, 3)
print codon
}
}
Este pequeno script awk
simplesmente exibe cada substring de três caracteres de cada linha. Na fala de bioinformática, produz os códons completos para cada quadro, um por vez.
Teste em seus dados:
$ awk -f script.awk <file
aac
aca
cac
acg
cga
gaa
aac
act
ctt
ttt
tta
taa
aac
aca
cac
acg
Você pode classificar e contar o número de vezes que cada códon ocorre:
$ awk -f script.awk <file | sort | uniq -c
3 aac
2 aca
2 acg
1 act
2 cac
1 cga
1 ctt
1 gaa
1 taa
1 tta
1 ttt
Se o arquivo contiver novas linhas, primeiro remova-as para conseguir os codons quebrados por novas linhas:
$ cat file
aacacgaactttaacacg
aacacgaactttaacacg
$ tr -d '\n' <file | awk -f script.awk | sort | uniq -c
6 aac
4 aca
4 acg
2 act
4 cac
3 cga
2 ctt
3 gaa
2 taa
2 tta
2 ttt
(observe como a contagem de cga
e gaa
mudou para 3 em vez de para 2)
Se os seus dados forem grandes , você teria que criar outra coisa para lidar com a transição em novas linhas:
{
$0 = lastbit $0
for (pos = 1; pos < length - 1; ++pos) {
codon = substr($0, pos, 3)
print codon
}
lastbit = substr($0, length - 1)
}
Isso salva as duas últimas bases de cada linha em lastbit
e as preparam para a próxima linha de sequência.
Executando isso nas mesmas duas linhas de entrada acima:
$ awk -f script.awk <file | sort | uniq -c
6 aac
4 aca
4 acg
2 act
4 cac
3 cga
2 ctt
3 gaa
2 taa
2 tta
2 ttt
Se você deseja apenas os codons no primeiro quadro:
{
$0 = lastbit $0
for (pos = 1; pos < length - 1; ++pos) {
if ((pos + length(lastbit)) % 3 == 1) {
codon = substr($0, pos, 3)
print codon
}
}
lastbit = substr($0, length - 1)
}
Adicione uma etapa sort -nr
extra aos pipelines acima se quiser que a saída seja classificada nas contagens em ordem decrescente.
Veja também: