gzipファイルから最初の数行を取得するにはどうすればよいですか?zcatを試しましたが、エラーが発生します
zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
回答:
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.
zless file.gz | head
。zmore
まだ壊れたパイプが残っています。zless
行く方法のようです。
Macでは<
、zcatとともにを使用する必要があります。
zcat < CONN.20111109.0057.gz|head
場合はラインの連続した範囲の必要性があること、一つの選択肢は次のようになります。
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行目を選択します。
この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
}
tar -xzOf some_huge_file.tar.gz | head