Man*_*uel 20 scripting shell-script text-processing files bioinformatics
我有一个文件夹,里面有很多文件(xyz1、xyz2,一直到 xyz5025),我需要在每个文件上运行一个脚本,得到 xyz1.faa、xyz2.faa 等等作为输出。
单个文件的命令是:
./transeq xyz1 xyz1.faa -table 11
Run Code Online (Sandbox Code Playgroud)
有没有办法自动做到这一点?也许是一个for-do组合?
Jef*_*ler 33
for file in xyz*
do
./transeq "$file" "${file}.faa" -table 11
done
Run Code Online (Sandbox Code Playgroud)
这是一个简单的for循环,它将遍历xyz当前目录中以开头的每个文件,并./transeq以文件名作为第一个参数调用程序,文件名后跟“.faa”作为第二个参数,后跟“-table 11” .
hsc*_*hou 24
如果您安装GNU Parallel,您可以像这样并行执行:
parallel ./transeq {} {}.faa -table 11 ::: xyz*
Run Code Online (Sandbox Code Playgroud)
如果你的程序是 CPU 密集型的,它应该会加速很多。
小智 6
您可以在bash命令行上执行以下操作:
printf '%s\n' {1..5025} | xargs -l -I {} -t ./transeq xyz{} xyz{}.faa -table 11
Run Code Online (Sandbox Code Playgroud)
我们正在生成从 1 到 5025 的整数,一个/行,然后将它们一一提供给 xargs,xargs 将整数封装{}到 ./transeq 命令行中,然后以适当的方式将其移植到 ./transeq 命令行中。
如果您没有大括号扩展工具,{n..m}那么您可以调用该seq实用程序来生成这些数字。
或者,您始终可以通过以下方式模拟数字生成:
yes | sed -n =\;5025q | xargs ...
Run Code Online (Sandbox Code Playgroud)