我被困在那.所以我在我的代码中有这个while-read循环需要很长时间,我想在很多处理器中运行它.但是,我想分割输入文件并运行14个循环(因为我有14个线程),每个分割文件一个并行运行.事情是,我不知道如何告诉while循环哪个文件可以使用和使用.
例如,在常规的while-read循环中,我会编码:
while read line
do
<some code>
done < input file or variable...
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我想将上面的输入文件拆分为14个文件,并在并行循环中运行14个循环,每个拆分文件一个循环.我试过了 :
split -n 14 input_file
find . -name "xa*" | \
parallel -j 14 | \
while read line
do
<lot of stuff>
done
Run Code Online (Sandbox Code Playgroud)
也试过了
split -n 14 input_file
function loop {
while read line
do
<lot of stuff>
done
}
export -f loop
parallel -j 14 ::: loop
Run Code Online (Sandbox Code Playgroud)
但是我都没能告诉哪个文件是循环的输入,所以并行会理解"将每个xa*文件并行放入各个循环"
输入文件的示例(字符串列表)
AEYS01000010.10484.12283
CVJT01000011.50.2173
KF625180.1.1799
KT949922.1.1791
LOBZ01000025.54942.57580
Run Code Online (Sandbox Code Playgroud)
编辑
这是代码.输出是一个表(741100行),其中包含有关已经进行的DNA序列比对的一些统计数据.循环采用input_file(没有折断线,从500到~45000行,800Kb不等)进行DNA序列分析,逐行读取并查找每个对应的数据库中的完整分类(~45000行) .然后,它做了一些总和/分裂.输出是.tsv,看起来像这样(序列"KF625180.1.1799"的示例):
Rate of taxonomies for this sequence …Run Code Online (Sandbox Code Playgroud)