2017-06-02 35 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文件有两个输入,你应该在两个文件之间有一个分隔符。

当您的程序获取分隔符时,您应该能够将输入分为两部分。由于管道可以将你的两个输入文件本身放在一个缓冲区中。

相关问题