解凍せずに.gz圧縮ファイルから数行を取得する方法


89

gzipファイルから最初の数行を取得するにはどうすればよいですか?zcatを試しましたが、エラーが発生します

zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.

回答:


149

zcat(1)のいずれかcompress(1)またはによって提供できますgzip(1)。お使いのシステムでは、次のように見えますcompress(1)-.Z拡張子の付いたファイルを探しています。

gzip -cd代わりにに切り替えるzcatと、コマンドは正常に機能するはずです。

 gzip -cd CONN.20111109.0057.gz | head

説明

   -c --stdout --to-stdout
          Write output on standard output; keep original files unchanged.  If there are several input files, the output consists of a sequence of independently compressed members. To obtain better compression, concatenate all input files before compressing
          them.

   -d --decompress --uncompress
          Decompress.

7
ところで、あなたは、これはあなたを助けるでしょう、* .tar.gz形式で座っている場合: tar -xzOf some_huge_file.tar.gz | head
demaniak

古いスレッドですが、これにより、大きなgzファイルで終了ステータス1の壊れたパイプが生成されます。クリーンな回避策はありますか?
kaligne 2017

2
私がこれまでに見つけた最良かつ最も簡単な回避策:を使用してくださいzless file.gz | headzmoreまだ壊れたパイプが残っています。zless行く方法のようです。
kaligne 2017

zlessは終了しません...少なくとも私の大きなファイルでは。私はまだ...壊れたパイプエラーなしでこれを行うやり方を探しています
フリーク


11

Macでは<、zcatとともにを使用する必要があります。

zcat < CONN.20111109.0057.gz|head


2

場合はラインの連続した範囲の必要性があること、一つの選択肢は次のようになります。

gunzip -c file.gz | sed -n '5,10p;11q' > subFile

ここで、の5行目と10行目(両方を含む)の間の行がfile.gz新しいに抽出されsubFileます。以下のためsedのオプションを参照してくださいマニュアル

たとえば、すべての場合、5行目が必要です。

gunzip -c file.gz | sed -n '1~5p;6q' > subFile

これは、1行目を抽出して4行をジャンプし、5行目を選択します。


0

このawkスニペットを使用すると、最初の数行だけでなく、指定できる範囲も表示できます。また、gzip圧縮されたファイルの特定の行を指すエラーメッセージをデバッグするために必要な行番号も追加されます。

gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'

上記のワンライナーで使用されているawkスニペットは次のとおりです。awkでは、NRは組み込み変数(これまでに見つかったレコードの数)であり、通常は行番号と同等です。fromおよびto変数は、-vオプションを介してコマンドラインから取得されます。

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.