как вывести имя файла и общее количество последовательностей fasta?

Вам нужно либоhw:1,0(чисто аппаратное устройство ), либоplughw:1,0(стандартный плагин для передискретизации перед аппаратным устройством )в качестве имени устройства ALSA для вашей карты 1 подустройство 0, или вы можете сделать aplay -Lи взгляните на все стандартные имена устройств (, которые будут включать выбор канала и многое другое)

0
05.09.2021, 13:44
2 ответа

Использование GNU awk для ENDFILEиgensub():

$ awk '/^>/{c++} ENDFILE{print gensub(/\.[^.]*$/,",",1,FILENAME) c+0; c=0}' *.fasta
cel,3
pas,1
test,2

Вышеупомянутое будет работать независимо от того, присутствует ли 1 или несколько входных файлов (, если это меньше ограничения аргументов оболочки )и независимо от того, какие символы присутствуют в ваших именах файлов, если это не =(, когда awk может в некоторых случаях обрабатывать это как присвоение переменной -, если это может произойти, см. https://www.gnu.org/software/gawk/manual/gawk.html#Other-Arguments, чтобы узнать, как с этим справиться ).

Вы можете сделать то же самое с любым awk:

$ awk '/^>/{c[FILENAME]++} END{for (i=1; i<ARGC; i++) {f=ARGV[i]; sub(/\.[^.]*$/,",",f); print f c[ARGV[i]]+0} }' *.fasta
cel,3
pas,1
test,2
4
05.09.2021, 15:11

Использование Raku (, ранее известного как Perl _6)

raku -e 'for dir(test => / \.fasta $/ ) -> $fh { put ($fh,  $_.grep(/ ^^ \> /).elems).join(",") given $fh.lines() };'

Ввод пробы (pwd):

~$ ls *.fasta
cel.fasta   pas.fasta   test.fasta

Пример вывода:

cel.fasta,3
pas.fasta,1
test.fasta,2

В этом решении используется Raku, член семейства языков программирования Perl -. Приведенный выше код основан на подпрограммах Раку dir()и grep()и, следовательно, может быть полезен на платформах, где классическая оболочка -опосредованный файл -подстановка отсутствует или ограничена (см. обсуждение SO здесь ).

Кратко, rakuвызывается с опцией -e, которая указывает компилятору Raku (Rakudo )скомпилировать и выполнить заданную одну -линейную программу. Метод dir()вызывается с ключевым словом for, которое указывает Raku перебирать значения имени файла, полученные с помощью фильтра test => / \.fasta $/. Найденные таким образом имена файлов загружаются по отдельности в переменную $fhи анализируются в блоке {…}.

Внутри блока, читая справа от -до -слева, linesизвлекаются из переменной дескриптора файла $fh, которая автоматически загружается в переменную темы $_. Эти строки (, содержащиеся в настоящее время в $_),grep-просматриваются для поиска строк с ^^началом -строки ->, что означает начало новой fastaпоследовательности. Найденные таким образом строки подсчитываются с использованием elems, а $fhи countjoin-заканчиваются запятой ,и возвращаются построчно с использованием put.

OP изначально запрашивает возврат «имени файла», поэтому технически приведенного выше кода достаточно. Однако, поскольку $fhявляются объектами IO::Path, достаточно просто удалить расширение .fasta:, просто добавив подпрограмму extensionк $fh, чтобы распознать расширение .fasta,и заменить его ничем(""):

~$ raku -e 'for dir(test => / \.fasta $/ ) -> $fh { put ($fh.extension(""), $_.grep(/ ^^ \> /).elems).join(",") given $fh.lines() };'
cel,3
pas,1
test,2

https://docs.raku.org/routine/dir
https://docs.raku.org/routine/grep
https://docs.raku.org/routine/extension
https://raku.org

1
27.10.2021, 14:54

Теги

Похожие вопросы