2016-04-15 112 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