2017-06-02 82 views
1

程序我想運行一個程序,它接受兩個輸入,但輸入必須先解壓縮。問題是文件太大,解壓縮它們不是一個好的解決方案,所以我需要解壓縮輸入。例如:如何通過bash中的管道傳遞兩個變量?

gunzip myfile.gz | runprog > hurray.txt 

這是一個完全正常的事情,但我想運行的程序需要兩個輸入,這兩者必須解壓縮。所以

gunzip file1.gz 

gunzip file2.gz 

runprog -1 file1_unzipped -2 file2_unzipped 

我需要一些方法來解壓縮文件,並通過他們在管,我想是這樣的:

gunzip f1.gz, f2.gz | runprog -1 f1_input -2 f2_input 

這是雙?有什麼辦法解壓兩個文件並將輸出傳遞到管道上?

+0

試試https://superuser.com/questions/201724/multiple-standard-input-how – slim

+0

如果你想發送兩個文件,一個接一個地解壓縮到你的程序'zcat 1的'stdin'。 gz 2.gz | yourProgram' –

回答

3

GNU gunzip--stdout選項(亦稱-c),只是這個目的,還有還有zcat作爲@slim指出。結果輸出連接成一個單一的流,因爲這是how pipes work。解決這個問題的一種方法是創建兩個輸入流並分別在runprog中處理它們。例如,這裏是你將如何做的第一個文件輸入流8,第二輸入流9:

runprog 8< <(zcat f1.gz) 9< <(zcat f2.gz) 

另一種方法是通過兩個文件描述符爲參數的命令:

runprog <(zcat f1.gz) <(zcat f2.gz) 

這兩個參數現在可以像兩個文件參數一樣處理。

+0

或者只是將它作爲'zcat'調用它 – slim

+0

非常感謝,我將嘗試這些,並會發布成功或失敗!我很感謝你的迴應! –

0

你的程序應該明白zip文件有兩個輸入,你應該在兩個文件之間有一個分隔符。

當您的程序獲取分隔符時,您應該能夠將輸入分爲兩部分。由於管道可以將你的兩個輸入文件本身放在一個緩衝區中。

相關問題