大家好,我有以下bash脚本,可从hmmer3软件调用hmmscan。 hmmscan需要指定6个命令行参数,在这种情况下,我编写的代码如下:
dblink
基本上,我正在遍历目录中找到的文件列表,并在每个文件上运行hmmscan,并且我正在使用此文件名附加输出名称,以便具有与之对应的不同输出名称。我的每个输入文件。
我的问题是循环很长,我想将此进程并行化以根据我在命令行中提供的CPU数量进行扩展。我想使用xargs这样做,因为我没有GNU并行功能,但是我不能安装任何东西,所以使用xargs是很重要的。请帮忙。基本上,我一直沉迷于如何使用xargs调用函数以及如何向其传递许多命令行参数。
答案 0 :(得分:0)
我假设您有权访问允许安装软件的开发机器。在此安装GNU Parallel> 20180222。
然后您运行:
parallel --embed > myscript.sh
然后将myscript.sh
的最后几行更改为:
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
}
export -f hmmscan_fun
parallel hmmscan_fun {1} {2} 32 myoutdir ::: files* ::: marker1 marker2
然后将脚本移至生产机器并在其中运行。