ディレクトリに、並べ替えられた gzip ファイルがいくつかあります。それらのいくつかを別のソートされたgzipファイルに結合するにはどうすればよいですか? 現在、明示的な fifo を使用しています。なしで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 $@
?
注: 各ファイルは 10 GB を超えています (解凍すると 100 GB になります)。私は2TBのドライブを持っているので、これは実際には問題ではありません. また、このプログラムは O(n) で実行する必要があります。そうしないと実行できなくなります。