Как считать последовательности, которые принадлежат кластеру?(из вывода cd-hit) - PullRequest
0 голосов
/ 01 июля 2019

У меня есть выход cd-hit, я хотел бы получить количество последовательностей, принадлежащих одному кластеру.

Мой ввод:

Кластер 1

0 33aa,> abu-miR-101a: 1-8 ... *

Кластер 2

0 33aa,> abu-miR-103: 1-8 ... * 1 33aa,> NODE_603086_length_... при 100,00%

2 33aa,> NODE_603086_length _... при 100,00%

3 33aa,> NODE_603086_length _... при 100,00%

4 33aa,> NODE_603086_length _... при 100,00%

Кластер 3

0 33aa,> abu-miR-10543: 1-8 ... *

1 33aa,> abu-miR-10543: 1-8 ... при 100,00%

Кластер 4

0 33aa,> abu-miR-10544: 1-8 ... *

Кластер 5

0 33aa,> abu-miR-10545-5p: 1 -... *

Мне бы хотелось получить следующие выходные данные:

Кластер 1 1

Кластер 2 5

Кластер 3 2

Кластер 4 1

Кластер 5 1

Мне просто нужно имя кластера в первом столбце и количество последовательностей, которые этот кластер содержит во втором столбце.

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Было бы хорошо, если бы вы показали нам, что вы пробовали, а также я не уверен, как вы получили 5 последовательностей, связанных с кластером 2 (в вашем выводе только 4 последовательности, но я заметил, что № 1 отсутствуетиз списка, так может это ошибка копирования / вставки?).Но один из способов сделать это в Perl, поскольку вы включили этот тег, - читать файл построчно, а если вы видите строку «Cluster», сделать ее хеш-ключом, иначе (для последующих строк), выполнить итерациюсчет как этот:

#!/usr/bin/env perl
use strict;
use warnings;
use autodie;

my %results;
my $cluster;

while (<DATA>) {
    if ($_ =~ /Cluster/) {
        chomp($cluster = $_);
        $results{$cluster} = 0;
    } else {
        $results{$cluster}++;
    }
}

print "$_\t$results{$_}\n" for (sort { $a cmp $b } keys %results);

__DATA__
Cluster 1
0 33aa, >abu-miR-101a:1-8... *
Cluster 2
0 33aa, >abu-miR-103:1-8... * 1 33aa, >NODE_603086_length_... at 100.00%
2 33aa, >NODE_603086_length_... at 100.00%
3 33aa, >NODE_603086_length_... at 100.00%
4 33aa, >NODE_603086_length_... at 100.00%
Cluster 3
0 33aa, >abu-miR-10543:1-8... *
1 33aa, >abu-miR-10543:1-8... at 100.00%
Cluster 4
0 33aa, >abu-miR-10544:1-8... *
Cluster 5
0 33aa, >abu-miR-10545-5p:1-... *

Я сделал много предположений здесь (например, новые кластеры всегда будут начинаться со строки, содержащей строку «Cluster #», за которой следуют последующие строки, содержащие последовательности, связанные скаждый "кластер").Это всего лишь простой пример быстрого способа обдумать это, и вам, вероятно, придется настроить его, чтобы удовлетворить ваши конечные потребности.

0 голосов
/ 02 июля 2019

Отлично! Оно работает! Я просто добавляю сортировку для получения результатов, отсортированных по номерам. Как это:

perl count-cluster.pl | sort -k 2 -g | head

Тогда результат головы:

Кластер 0 64

Кластер 1 1

Кластер 2 5

Кластер 3 2

Кластер 4 1

Кластер 5 1

Кластер 6 1

Кластер 7 3

Кластер 8 1

Кластер 9 1

Спасибо большое! В моих файлах более 3000 строк, и мне нужны эти результаты для трех разных условий, это очень помогает! Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...