データのストリームをその STDOUT に出力するプログラム (gawk) があります。処理されるデータは文字通り数十 GB です。単一のファイルに保存するのではなく、チャンクに分割し、保存する前にそれぞれに追加の処理 (圧縮など) を適用する可能性があります。
私のデータは一連のレコードであり、分割によってレコードを半分に分割したくありません。各レコードは、次の正規表現に一致します。
^\{index.+?\}\}\n\{.+?\}$
または簡単にするために、2 つの行 (最初は奇数で、ストリームの先頭から数えた場合でも) は常にレコードを作成すると仮定できます。
できること:
- 標準のLinuxコマンドを使用して、チャンクの適切なサイズを定義してSTDINを分割しますか? レコード変数のサイズが正確であることを保証できないため、正確である必要はありません。または、def の場合はレコード数のみ。サイズによっては不可能です
- 各チャンクを圧縮してファイルに保存します (名前に 001、002 などの番号を付けます)。
GNU parallelのようなコマンドを認識したり、それらcsplit
を組み合わせる方法がわかりません。上で説明した機能が、カスタム perl スクリプトを書かずに実現できれば素晴らしいでしょう。ただし、これは別の最後の手段になる可能性がありますが、最適な実装方法はわかりません。