for file in xyz*
do
./transeq "$file" "${file}.faa" -table 11
done
Это простой цикл for
, который перебирает каждый файл, начинающийся с xyz
в текущем каталоге, и вызывает программу ./transeq
с именем файла в качестве первого аргумента, за именем файла следует ".faa" в качестве второго аргумента, за которым следует "-таблица 11".
Попробуйте это:
echo "'${TEXT// [^0-9]*/}'" "'${TEXT1// [^0-9]*/}'"
Выход:
'Anything 7' 'Random 19'
Обратите внимание: если в строке нет чисел, этот код удалит все, что находится после первого пробела.
Вы можете использовать функцию сопоставления регулярных выражений оболочки bash:
$ TEXT='Random text 1 and some more random'
$ [[ $TEXT =~ ^[^0-9]*[0-9] ]] && printf '%s\n' "$BASH_REMATCH"
Random text 1
где ^[^0-9]*[0-9]
соответствует нулю или более не -цифрам, за которыми следует цифра, привязанная к началу строки
Если есть только одна группа цифр, вы можете сделать это в два шага (в одном раскрытии):
Удалите самый длинный начальный текст, который заканчивается цифрой.
$ text='Random 923 and more'
$ echo "'${text##*[0-9]}'"
' and more'
Затем удалите выбранный завершающий текст из исходной строки:
$ echo "'${text%"${text##*[0-9]}"}'"
'Random 9'
Это работает, если в конце текста нет дополнительных цифр.
Если кластеров цифр может быть несколько, а вам нужен только первый, он становится немного длиннее и требует двух дополнительных переменных.
$ text='Random 945 and more 752 numbers'
$ lead=${text%%[0-9]*}
$ trail=${text#"$lead"}
$ echo "'$lead${trail%%[!0-9]*}'"
'Random 945'