我有些排序,目錄中的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