【发布时间】:2019-11-20 08:41:35
【问题描述】:
大家好,我有以下从 hmmer3 软件调用 hmmscan 的 bash 脚本。 hmmscan 在这种情况下需要指定 6 个命令行参数,我编写的代码如下:
hmmscan_fun () {
local file=$1
local marker_profiles=$2
local n_threads=$3
local out_dir=$4
fname=$(echo $file | rev | cut -d'/' -f1 | rev)
echo 'filename'
echo $out_dir$fname".txt"
echo 'n threads'
echo $n_threads
echo 'marker profiles'
echo $marker_profiles
echo $out_dir$fname".txt" >> $out_dir"out.txt"
hmmscan -o $out_dir$fname".txt" --tblout $out_dir$fname".hmm" -E 1e-10 --cpu $n_threads $marker_profiles $file
}
基本上,我正在遍历目录中找到的文件列表并在每个文件上运行 hmmscan,并且我使用此文件名附加到输出名称上,以便我将有不同的输出名称对应于我的每个输入文件。
我的问题是循环很长,我想将此过程并行化,以根据我在命令行提供的 CPU 数量进行扩展。我想使用 xargs 这样做很重要,我使用 xargs 因为我没有 GNUs 并行功能,不幸的是我无法安装任何东西。请帮忙。基本上我坚持如何使用 xargs 调用函数以及如何将许多命令行参数传递给它。
【问题讨论】:
-
如果您无法安装任何东西,您将如何使用您得到的任何答案?您是否要将获得的答案复制并粘贴到脚本中?如果是这样,那正是 GNU Parallel 的本质——它是一个可以复制和粘贴的 Perl 脚本。
-
请查看
parallel --embed(自 20180222 起可用)。它适用于不允许您安装软件,但允许您运行自己的脚本的情况。
标签: bash parallel-processing gnu-parallel