嗨,我想这是一个非常基本的问题:
使用“bsub”时是否有任何特定的语法来执行“管道”?
我这么问是因为当我遇到这样的问题时:
# try to run the same command successfully ran in another host
bsub fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimmed_file.fastq &
但我遇到了一个错误:
fastq_quality_trimmer: input file (-) has unknown file format (not FASTA or FASTQ), first character = J (74)
第二个命令似乎无法找到第一个命令的输出。
# try to run command without using "|"
bsub fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq -o Trimmed_file.fastq
# seemed to work!
bsub fastq_quality_trimmer -Q33 -t 18 -l 20 -i Trimmed_file.fastq -o Trimme_file2.fastq &
# Also seemed to work!
# try to pipe again, did not work...
bsub fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimme_file2.fastq &
# when call command without bsub, it seemed to work.
fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimme_file2.fastq &
# so the issue seemed to be "bsub"
我想使用bsub,因为我的主机正在使用gate节点(之前的主机没有gate节点,所以我是否使用“bsub”并不重要),并且我不想通过运行来创建“交通拥堵”门节点中的命令。有什么建议吗?
答案1
如果提交成功,该bsub
命令将输出作业提交ID和已提交的队列名称。
bsub
不会为您提供 的输出fastx_trimmer
,这意味着它不能用于fastq_quality_trimmer
通过管道直接输入。
您需要将整个管道提交到队列中以使其正常工作,方法是将命令放入 shell 脚本中并提交(理想情况下,如果您计划运行多次),或者通过在中正确引用整个管道致电bsub
.
答案2
我通过电子邮件收到了朋友的建议。两种解决方法: 1.将真正的命令放在“”中。
bsub "fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimmed_file.fastq”
- 为 bsub 编写 bash 脚本。
我尝试了解决方案1。效果很好。把它放在这里以防其他人有类似的问题。
答案3
我没有足够的资金来使用您的示例中提到的特定程序进行测试。
然而,你所要求的是可以通过-I
(破折号大写字母)选项来实现bsub
。唯一的问题是作业提交消息也被发送到标准输出,这将与预期的混合在一起实际的程序的输出:
Job <123456> is submitted to default queue <normal>.
这似乎是 LSF 中的一个错误(应该转到 stderr)。解决方法礼貌这个答案是:
BSUB_QUIET=1 bsub -I cmd-that-writes-to-stdout | cmd-that-reads-from-stdin
请注意,环境变量的实际值BSUB_QUIET
显然并不重要;它只需要是定义的在环境中。
对于一次性命令,您可以将一个命令的输出通过管道传输bsub -I
到另一个命令中bsub -I
,没有问题:
$ export BSUB_QUIET=1
$ bsub -I grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ bsub -I grep ^root /etc/passwd | bsub -I awk -F: '{print \$6}'
/root
你会$
但是,如果它们出现在命令中的某个位置,则必须小心引用或转义 shell 元字符,例如, 。正如其他人所建议的那样,这是简单使用独立脚本的另一个很好的理由。
希望有帮助。