
zgrep を使用してパターンを検索し、複数の .gz ファイルで行を一致させ、N 行を印刷します。
--
BSD zgrep では、各ファイルの後に区切り文字が表示されます。
zgrep (BSD grep) 2.5.1-FreeBSD
$ zgrep "match string" -A 1 FileName1.log.gz FileName2.log.gz
FileName1.log.gz:match string
FileName1.log.gz-
--
FileName2.log.gz:match string
FileName2.log.gz-
しかし、GNUでは同じ状況を見ることはできません:
zgrep (gzip) 1.6
Copyright (C) 2010-2013 Free Software Foundation, Inc.
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
Written by Jean-loup Gailly.
# zgrep "match string" -A 1 FileName1.log.gz FileName2.log.gz
FileName1.log.gz:match string
FileName1.log.gz:
FileName2.log.gz:match string
FileName2.log.gz:
--group-separatorを試しましたが、単一のファイルから一致を区別するようです。
GNU zgrepで同様の結果を得るにはどうすればよいですか?
答え1
zgrep
GNU(またはFreeBSDとmacOSにzgrep
固有のOpenBSD)を使用してzgrep
同様の出力を得ることはできません。結果を直接後処理しない限り、これは簡単です。
$ zgrep hello file*.gz | awk -F : 'NR > 1 && $1 != name { print "--" } { name = $1; print }'
file1.gz:hello world
--
file2.gz:hello world
--
file3.gz:hello world
--
file4.gz:hello world
--
file5.gz:hello world
zgrep
awk
これは、行のファイル名ビット(最初のビットの前のビット)が変更されるたびに区切り:
文字を挿入する短いプログラムを介して出力を渡します。