在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
选项,而不仅仅是连接它们并采用整个事情。
答案 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