GNU/Linux >> Linux の 問題 >  >> Linux

unix - 巨大な .gz ファイルを行ごとに分割する

パイプを分割するには、gunzip -c または zcat を使用してファイルを開きます

gunzip -c bigfile.gz | split -l 400000

分割コマンドに出力仕様を追加します。


これを最適に行う方法は、目的によって異なります:

  • 大きなファイルの一部を抽出しますか?
  • それとも、一度にすべてのパーツを作成しますか?

ファイルの一部のみが必要な場合 、 gunzip を使用するあなたのアイデア と head は正しい。以下を使用できます:

gunzip -c hugefile.txt.gz | head -n 4000000

これにより、最初の 4000000 行が標準出力に出力されます。実際にデータで何かを行うには、おそらく別のパイプを追加する必要があります。

他の部分を取得するには、 head の組み合わせを使用します と tail など:

gunzip -c hugefile.txt.gz | head -n 8000000 |tail -n 4000000

2 番目のブロックを取得します。

<ブロック引用>

おそらくこれらの一連の解決策を実行していますか、それとも gunzip -ファイル全体を解凍するのに十分なスペースが必要ですか?

いいえ、gunzip -c です ディスク容量を必要としません。すべてをメモリ内で実行してから、stdout にストリーミングします。

一度にすべてのパーツを作成したい場合 、入力ファイルが一度だけ読み取られるため、単一のコマンドでそれらすべてを作成する方が効率的です。良い解決策の 1 つは split を使用することです。;詳細については、ジム・マクナマラの回答を参照してください。


(巻き戻し不可の) ストリームで作業しているため、'+N' 形式の末尾を使用して、N 行目以降の行を取得する必要があります。

zcat hugefile.txt.gz | head -n 40000000
zcat hugefile.txt.gz | tail -n +40000001 | head -n 40000000
zcat hugefile.txt.gz | tail -n +80000001 | head -n 40000000

Linux
  1. Linuxでコマンドラインからファイルを分割して結合する方法

  2. UNIX/Linux でファイルの行数を数える方法

  3. ファイルの作成日を変更する

  1. ファイルを分割し、各部分の最初の行を保持する方法は?

  2. unix - ファイルの先頭と末尾

  3. unix - ファイル内の列数

  1. 巨大なファイルの線Xから線Yへの猫?

  2. Busy Boxはファイルを1行ずつ読み取りますか?

  3. Unix の行末を Windows に変換する