我有一些已排序和压缩过的文件在一个目录中。如何将其中一些组合成另一个已排序和压缩过的文件?目前我正在使用显式FIFO(命名管道)。是否有一种在bash中不需要这样做的方法?我是一个bash新手,所以请原谅我的不专业。
#!/bin/bash
# Invocation ./merge [files ... ]
# Turns an arbitrary set of sorted, gzipped files into a single sorted, gzipped file,
# printed to stdout. Redirect this script's output!
for f in $@
do
mkfifo $f.raw
gzcat $f > $f.raw &
# sort -C $f.raw
done
sort -mu *.raw | gzip -c # prints to stdout.
rm -f *.raw
我想把这个转换成类似于...的东西。
sort -mu <(gzcat $1) <(gzcat $2) <(gzcat $3) ... | gzip -9c # prints to stdout.
...但是不知道该怎么做。我需要建立一个循环来将参数转换为字符串吗?有没有什么魔法快捷方式可以做到这一点?也许是 map gzcat $@
?
注意:每个文件的大小都超过10GB(解压后达到100GB以上)。我有一块2TB的硬盘,所以这并不是问题。此外,此程序必须在O(n)时间内运行,否则就变得不可行。
eval
或bash -c "$cmd"
来执行它。 - Jonathan Leffler