具有多个输入文件的Bash命令

时间:2013-12-07 17:46:11

标签: bash sorting stdin

在bash中,有没有办法做某种循环来将多个输入传递给一个命令,即。来缩短像

这样的东西
cmd < 1.txt < 2.txt < ... < 100.txt

我确切的用例是我有一堆已排序的gzip文件,我想将它们合并到另一个gzip压缩文件中:

sort --merge <(zcat 1.txt.gz) <(zcat 2.txt.gz) ... <(zcat 100.txt.gz) | gzip > out.txt.gz

如果可能的话,我想避免单独解压缩它们。

编辑: 我应该注意文件是巨大的,这就是为什么我想利用--merge选项,而不仅仅是连接它们并采用整个事情。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

zcat *.txt.gz | sort -m | gzip > out.txt.gz

但正如你所指出的那样,这是完全错误的。你是对的,因为sort -m有意义,你需要多个文件。

请改为尝试:

x=; for i in *.txt.gz; do x="$x <(zcat $i)"; done
eval "sort -m $x" | gzip > out.txt.gz