More Related Content
Similar to mlr-grep - レコード指向grep
Similar to mlr-grep - レコード指向grep (20)
mlr-grep - レコード指向grep
- 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
- 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
- 11. $ amlgrep h t [--] [FILE]
[one]
two
three
[hoge]
piyo
huga
≒ egrep 'h|t' 。でも少ないキータイプ数
11
- 13. $ amlgrep -a h t …
[one]
two
three
≒ egrep 'h.*t|t.*h'
でも、少ないキー(ry
13
- 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