Объединение отсортированных файлов с помощью 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 ГБ (и 100 ГБ в разархивированном виде). У меня диск емкостью 2 ТБ, так что это не проблема. Кроме того, эта программа ДОЛЖНА выполняться за O (n), иначе она станет невозможной.

5
задан Clark Gaebel 13 June 2011 в 05:18
поделиться