2017-04-19 12 views
2

私はすべてのソートされたgzippedファイルのディレクトリを持っています。ディレクトリにいくつのファイルがあるのか​​分かりません。これらのファイルを1つのファイルにマージしたいと思います。私はこのようなことをしていた: find . -type f | xargs zcat | sort しかし、私は-mフラグを追加すると、ファイルを次々に連結しているだけです。 sort -mを使用して、ディレクトリ内のすべてのソート済みファイルをマージする方法はありますか?ファイル名を知らずにソートされたファイルをマージする

ありがとうございます!

@ chepnerのソリューションは、圧縮されていないファイルに対しては完全に機能することにご注目ください。

+0

'sort'コマンドは、ZIPファイルを入力として受け取ることができません。 –

+1

'sort -m'はソートされません。それは、あらかじめソートされた入力ファイルをマージするだけです。標準入力から読み込むと、*入力ファイルが1つしかありません。このコンテキストで '-m'は必要ありません。 – chepner

+0

ファイルがすべてソートされていることを知っているので、単にファイルをマージしたいのですが、それは可能ですか? –

答えて

0

私は答えを見つけました!

find . -type f | awk '{print "<(gzip -cd "$0")"}' | tr "\n" " " | (echo -n sort -m " "; cat -; echo) | bash

これは、ディレクトリ内のすべてのファイルを見つけ、道に沿ってスペースで改行を置き換える、sortコマンドの引数として送信します。皆様のお越しをお待ちしております!

3

事前ソートされたファイルをマージするには、データを標準入力としてではなく、引数として名前を指定する必要があります。ちょうど使用し、あなたがその多くのファイルを持っていないと仮定すると、

sort -m * 
+2

しかし、ファイルは 'gzip'dです。おそらく、いくつかのプロセス置換を構築または評価する必要があります。 –

+0

はい、それは私の問題の根源です。 –

+0

2つのgzippedファイルを連結して1つ長いgzipファイルにすることができます。 * sort *を実際に行う必要がない場合、 'cat log * .gz> bigfile.gz'はうまくいくようです。 – ghoti

関連する問題