将输出重定向到feed作为命令行的输入?

时间:2011-06-12 21:11:34

标签: java perl bash syntax redirect

我想在bash脚本中运行以下代码:

java -jar VarScan.v2.2.jar somatic < samtools view -b -u -q 1 $n_b \
| samtools pileup -f $r - < samtools view -b -u -q 1 $t_b \
| samtools pileup -f $r - output

其中$ n_b和$ t_b是文件。

java somatic函数需要2个参数。所以

samtools view -b -u -q 1 $n_b | samtools pileup -f $r

是其中一个参数

samtools view -b -u -q 1 $t_b | samtools pileup -f $r

是另一个参数。这两个参数本身都是可执行的。

所以我想要的是

samtools view -b -u -q 1 $n_b | samtools pileup -f $r -

先执行

samtools view -b -u -q 1 $t_b | samtools pileup -f $r

,输出成为体细胞的输入。

3 个答案:

答案 0 :(得分:2)

[编辑]我想我现在明白你的问题,如果我错了,请纠正我。

让我们从最简单的示例开始,该示例与您的示例具有相同数量的不同命令行。想象一下,你有三个程序,'somatic','samtools1'和'samtools2'。 somatic有两个参数,而samtools1和samtools2则没有。

让我们进一步想象一下,当运行samtools1时,它会产生一个单词'output1'。同样地,让我们假设当samtools2运行时,它会产生一个单词'output2'。然后,您可以运行命令

somatic output1 output2

作为命令行。

实现这一目标的方法是

somatic `samtools1` `samtools2`

不涉及重定向。

或者在血腥细节中,使用您的原始示例,例如

java -jar VarScan.v2.2.jar somatic `samtools view -b -u -q 1 $n_b | samtools pileup -f $r -` `samtools view -b -u -q 1 $t_b | samtools pileup -f $r - output`

虽然`和|之间可能存在一些相互作用这需要一些括号或引用。我实际上并没有尝试过这个。

[剩下的旧东西用于审核]

您的问题对我来说并不完全清楚:您是否清楚自己想要重定向输出还是制定命令行?我怀疑你的意思是后者,因为你谈到了两个参数,而且只有一个标准输入。

如果要从命令输出中制定命令行参数,则要使用的bash语法是反引号'''

例如,要运行一个命令'mycommand',它希望将日期作为命令行参考,你可以使用

mycommand `date`

将运行date命令,并使用该命令的输出作为mycommand的第一个参数。

答案 1 :(得分:0)

可能不是答案,因为我对这个问题缺乏理解:

<击> 我会用

(samtools view -b -u -q 1 $ n_b | samtools pileup -f $ r - ; \      samtools view -b -u -q 1 $ t_b | samtools pileup -f $ r - )\     | java -jar VarScan.v2.2.jar体细胞输出

答案 2 :(得分:0)

我的问题的解决方案可在以下网址找到:

https://gist.github.com/1022747