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