繁体   English   中英

使用多个命令运行循环文件,当第一个命令上一个文件完成时运行下一个文件

[英]Run for loop files with multiple commands, run next file when first command previous file done

对于一个项目,我创建了多个 python 脚本,我想在 shell 脚本中的文件目录上运行这些脚本。 在这个 shell 脚本中,我已经创建了一个带有多个命令的 for 循环。 第一个命令是一个python脚本,它将输入文件对本地数据库进行爆破并占用大部分内核。 接下来的命令占用更少的内核,但需要很多时间。 非常重要的是,对于每个文件,命令都按顺序运行。 为了节省时间,我想改变 shell 脚本来运行文件的第一个命令,当它完成时,同时在输出上运行下一个命令和下一个文件上的第一个命令。

有人可以帮我解决这个问题吗? 我试图搜索自己,但我找不到答案。 我没有尝试运行这个脚本,因为我已经在运行没有 shell 脚本的 python 脚本。

这是到目前为止的脚本:

#!/bin/bash
tsv=/home/user/tsv
fasta=/home/user/fasta/*
clustering=/home/user/clustering

for file in ${fasta}
do
    python blastn_new.py --fasta ${file} --tsv ${tsv}/${file}.tsv &&
    mkdir ${clustering}/${file} &&
    mkdir ${clustering}/${file}/clusters &&
    python blastparsPB.py --clusters ${clustering}/${file}/${file}.txt --fish ${tsv}/${file}.tsv --dir ${clustering}/${file}/clusters/
done

您可以在后台运行第二个脚本。

以下也有一些切线注释,并稍微重新格式化您的代码。

#!/bin/bash

# You cannot have spaces around the equals signs
# Also, avoid hard-coding an absolute path
tsv=./tsv
db=./newpacbiodb/pacbiodb
clustering=./clustering

# Notice proper quoting throughout
for file in ./fasta/*
do
    python blastn_new.py \
        --fasta "${file}" \
        --tsv "${tsv}/${file}.tsv" &&
    # mkdir -p creates an entire path if necessary
    # (and works fine even if the directory already exists)
    mkdir -p "${clustering}/${file}/clusters" &&
    python blastparsPB.py \
        --clusters "${clustering}/${file}/${file}.txt" \
        --fish "${tsv}/${file}.tsv" \
        --dir "${clustering}/${file}/clusters/" &
done # notice the simple addition of background ^ job

显然,这假设第二个 Python 脚本不喜欢同时连接到数据库以进行写入,但这已经是给定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM