2016-04-15 111 views
0

我有一个软件在Linux工作,像test_sf如何在linux中使用管道?

test_sf --input test.fastq --output test.results 

它会输出一个名为检验。结果

,但我有test1.fastq.gztest2的文件。 fastq.gz,怎么可以用这两个文件代替解压呢?

zcat test1.fastq.gz | test_st --input --output test1.results 
zcat test1.fastq.gz | test_st --input --output test1.results 

这两个命令不起作用。

注意:这只是一个玩具命令来显示我的问题。

+0

1)读你自己,纠正你的例子,2)看看'xargs' 3)这里不需要用[R]标记。 – Tensibai

+1

'test_st'是做什么的?它是否从标准输入读取?这就是所有的管道,从左边的标准输出并将其运行到右侧的标准输入。 –

回答

2

你有这样的命令:

test_sf --input test.fastq --output test.results 

您将理想运行它,但你不能因为你的程序不支持压缩输入:

test_sf --input test.fastq.gz --output test.results # probably fails 

所以你需要使用zcat将文件解压缩,然后将其插入。有些程序将-理解为标准输入法的神奇文件名,在这种情况下,您可以执行此操作:

zcat test.fastq | test_sf --input - --output test.results # might work 

如果你的程序还没有明白-特殊,您可以在Bash的使用:这样做是有一个命令行实际上像这样调用程序

test_sf --input <(zcat test.fastq.gz) --output test.results # should work 

test_sf --input /dev/XXX --output test.results 

其中XXX是一些特殊的文件名,它实际上是zcat将写入的管道。这样,只要你的程序支持从文件串行读取(不需要随机访问输入),它几乎肯定会起作用。这最后一种技术在这里进一步描述:https://unix.stackexchange.com/questions/101143/how-can-i-stream-data-to-a-program-that-expects-to-read-data-from-a-file-that-is

+0

谢谢。我测试了前两个,它的工作,但没有尝试过第三个。 – Ming