我有些排序,目录中的gzip文件。我如何将其中的一些文件合并到另一个经过排序的gzip文件中?现在我正在使用显式的fifos。有没有办法在bash中完成它?我是一个bash noob,所以请原谅我缺乏风格。合并排序的文件与FIFO的
#!/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 [email protected]
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 [email protected]
?
注:每个文件是超过10GB(100GB和解压)的。我有一个2TB的驱动器,所以这不是一个真正的问题。另外,这个程序必须在O(n)中运行,否则它变得不可行。
我在回答时看到你编辑了这个问题 - 是的,你需要一个循环来构建命令字符串,并且可以使用'eval'或'bash -c“$ cmd”'来执行它。 – 2011-06-13 05:30:27