Submit Search
mlr-grep - レコード指向grep
3 likes
982 views
Ryoichi KATO
複数行にわたるログファイルの検索・抽出に便利な「レコード指向grep」コマンドの宣伝
Software
Read more
1 of 19
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
More Related Content
What's hot
(20)
PDF
5社のGTFSをマージして、PostgreSQLにインポートしてみた
Masaki Ito
PDF
Ag and ack
Joe_noh
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
Ryuichi Ueda
ODP
(define)なしで再帰関数を定義する
blackenedgold
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
PDF
ソースコードリーディングの基礎
hogemuta
PDF
Inquisitor -Common Lispに文字コード判定を-
t-sin
PDF
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
PDF
Cython intro prelerease
Shiqiao Du
PPTX
Node.js - sleep sort algorithm
takesako
PPT
python-geohex
遼 会田
PPT
BlockSorting
iuno
PDF
Haskell超初心者勉強会11
Takashi Kawachi
PDF
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
PPTX
rpi_handson_2.5
teruyaono1
PPTX
C++のビルド高速化について
AimingStudy
PPT
IPv6アドレスでお絵かき
Yasuyuki Nakamura
PDF
Gitを理解するためにおさえておきたい3つの図(工事中)
Teloo
PDF
図でわかるGit
Teloo
PDF
Write good parser in perl
Jiro Nishiguchi
5社のGTFSをマージして、PostgreSQLにインポートしてみた
Masaki Ito
Ag and ack
Joe_noh
awk v.s. bashどっちが強い?@OSC2011Tokyo
Ryuichi Ueda
(define)なしで再帰関数を定義する
blackenedgold
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
ソースコードリーディングの基礎
hogemuta
Inquisitor -Common Lispに文字コード判定を-
t-sin
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
Cython intro prelerease
Shiqiao Du
Node.js - sleep sort algorithm
takesako
python-geohex
遼 会田
BlockSorting
iuno
Haskell超初心者勉強会11
Takashi Kawachi
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
rpi_handson_2.5
teruyaono1
C++のビルド高速化について
AimingStudy
IPv6アドレスでお絵かき
Yasuyuki Nakamura
Gitを理解するためにおさえておきたい3つの図(工事中)
Teloo
図でわかるGit
Teloo
Write good parser in perl
Jiro Nishiguchi
Similar to mlr-grep - レコード指向grep
(20)
PDF
Application Developer Festival 2015 LT
Junpei Matsuda
PPT
How to debug a perl script using gdb
akirahiguchi
PDF
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
PDF
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
PDF
マーク&スイープ勉強会
7shi
PDF
あまぁいRcpp生活
Masaki Tsuda
PDF
Tokyor23 doradora09
Nobuaki Oshiro
PPTX
URLで遊ぼう
Hiraku Nakano
PDF
One - Common Lispでもワンライナーしたい
t-sin
PPT
ZFSのソースコードをチラ見してみる
Koichi Suzuki
PDF
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
KEY
Clojure programming-chapter-2
Masao Kato
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
PDF
HPC Phys-20201203
MITSUNARI Shigeo
PDF
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
PDF
Unity2015_No10_~UGUI&Audio~
CHY72
PDF
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
PDF
Rubysapporo Stringsearch
Akio Ishida
PDF
Everyday Life with clojure.spec
Kent Ohashi
Application Developer Festival 2015 LT
Junpei Matsuda
How to debug a perl script using gdb
akirahiguchi
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
マーク&スイープ勉強会
7shi
あまぁいRcpp生活
Masaki Tsuda
Tokyor23 doradora09
Nobuaki Oshiro
URLで遊ぼう
Hiraku Nakano
One - Common Lispでもワンライナーしたい
t-sin
ZFSのソースコードをチラ見してみる
Koichi Suzuki
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
Clojure programming-chapter-2
Masao Kato
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
HPC Phys-20201203
MITSUNARI Shigeo
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
Unity2015_No10_~UGUI&Audio~
CHY72
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
Rubysapporo Stringsearch
Akio Ishida
Everyday Life with clojure.spec
Kent Ohashi
Ad
mlr-grep - レコード指向grep
1.
レコード指向grep mlr-grep ryo1kato
@github @gmail @twitter @facebook
2.
grepで、複数行のパ ターンを検索したい !
✦ 複数行ログとか、*.ini とか ✦ ifconfig的な半構造化された出力 2
3.
例えば、こんなデータの $ cat
data.txt [one] two three [foo] bar baz [hoge] piyo huga } キーワードを含むレコード行 全体を取り出したい。 3
4.
よくやる方法としては… ✦ grep
-A 12 -B 34 -C 56 ✦ pcregrep --multiline ✦ awk -v RS='nn' "/$re/" ✦ perl -e … 4
5.
だけど… ✦ AWKなら一応、そこそこ簡単に可
能 ✦ pcregrep…正規表現がすごく長 くなる ✦元のレコードの「正しい抜粋」は 難しい (gawkは可能だが困難) ✦ perl … お好きにどうぞ 5
6.
更に、こんな便利機能も使いたい… ✦ zgrep
✦ grep -c (--count) ✦ grep -i (--ignore-case) ✦ grep -v (--invert-match) ✦ grep --color 6
7.
そこで、作りました! ✦mlr-grep ✦Multi-Line
Record Grep ✦AWK, Haskell, Python版の3種 ✦ 機能は、ほぼ同じ 7
8.
例えば… } キーワードを含む
$ amlgrep 'ba' … [foo] bar baz 「レコード」全体を出力 8
9.
✦ amlgrep -
AWK版 (gawk必須) ✦ 一番早い。RHEL5やで --rs に一部難あり ✦ *.{gz,bz2,xz} を自動で展開して読み込む。 ✦ --color, --count, --invert-match ✦ 複数キーワードのAND, OR ✦ hmlgrep - Haskell版 ✦ AWK版とほぼ同じ機能。ただし *.gz の自動展開は無し ✦ 少し遅い(短い行が多いと1.5~2倍ほど遅い) ✦ pymlgrep - Python版 ✦ 一番遅い(AWK版の4倍位) ✦ 複数キーワードはサポートせず 9
10.
便利機能1 複数キーワード 10
11.
$ amlgrep h
t [--] [FILE] [one] two three [hoge] piyo huga ≒ egrep 'h|t' 。でも少ないキータイプ数 11
12.
便利機能2 -a, --and
12
13.
$ amlgrep -a
h t … [one] two three ≒ egrep 'h.*t|t.*h' でも、少ないキー(ry 13
14.
--timestamp ! 日付時刻入りの、
複数行logファイルに 14
15.
$ cat datetime.log
2014-01-23 12:34:56 log 1 foo bar 2014-01-24 12:34:57 log 2 one two 2014-01-25 12:34:58 log 3 hoge piyo 15
16.
$ amlgrep -t
'one' … 2014-01-24 12:34:57 log 2 one two 16
17.
$ amlgrep -t
--dump foo gawk -W re-interval -F n -v RS='n(((Mon| Tue|Wed|Thu|Fri|Sat),?[ t]+)?(Jan|Feb| Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Dec),? [ t]*[0-9]{1,2},?[ t][0-2][0-9]:[0-5] [0-9](:[0-5][0-9])?(,?[ t]20[0-9][0-9])?| 20[0-9][0-9]-(0[0-9]|11|12)-(0[1-9]|[12] [0-9]|3[01]))' '-v' 'ORS=' 'oldRT $0 ~ / foo/ {i++;if(substr(oldRT,1,1)=="n") {h=substr(oldRT,2)}else{h=oldRT};;gsub(/ foo/,"&",h);print h;gsub(/foo/, "&");print;if(RT != "")printf "n"} {oldRT=RT} END{if (i>0){exit 0}else{exit 1}}' 17
18.
レコード区切りを変えるには ✦ --rs
'^$' ✦ 空行 ✦ --rs '^----' ✦ 4つ(以上)のダッシュで始まる ✦ --rs '^[[:alnum]]' ✦ 行頭に文字がある (ifconfig的な出力) ✦ --timestamp ≒ -rs '^(((Mon|Tue|Wed|Thu|Fri|Sat),?[t]+)?(Jan|Feb|Mar|Apr|May|Jun| Jul|Aug|Sep|Oct|Dec),?[ t]*[0-9]{1,2},?[ t][0-2][0-9]:[0-5][0-9](: [0-5][0-9])?(,?[ t]20[0-9][0-9])?|20[0-9][0-9]-(0[0-9]|11|12)-(0[1-9]| [12][0-9]|3[01]))' 18
19.
http://github.com/ ryo1kato/mlr-grep 19
Download