Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2044837
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-05-11 09:08:48


精灵




CU编号: 493918
注册:2006-11-22
最后登录: 2009-05-10
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-10 23:46 
cat t.txt

# Time: 090510 22:01:52
# Query_time: 13.325708  Lock_time: 0.000079 Rows_sent: 1  Rows_examined: 779546
select count(*),sum(creditAmount),sum(creditPresent),sum(point) from Credited;
# Time: 090510 22:28:58
# Query_time: 25.253189  Lock_time: 0.000100 Rows_sent: 1  Rows_examined: 8595
select count(*),sum(deposit),sum(costExpense) from CardOpen;
# Time: 090510 22:29:28
# Query_time: 30.170243  Lock_time: 0.000109 Rows_sent: 1  Rows_examined: 8131
select count(*),sum(returnAmount),sum(roundAmount),sum(deposit),sum(costExpense) from Returned;


需要用sed匹配带有Query_time的行,且Query_time: 后面的值大于30的行,然后再将这一行和它的下一行打印出来。

我向在用 cat t.txt |sed -n '/Query_time/ {p;n;p;}'|head 可以找到这些行,但没法去匹配Query_time的值。

求各位大侠指教。



您对本贴的看法:
| |
  帅哥
侠客



CU编号: 464023
注册:2006-9-10
最后登录: 2009-05-10
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-10 23:53 
[beyond@freebsd ~/shell]$ cat test | sed -n '/Query_time/p' | awk '{if($3>30)print}'
# Query_time: 30.170243  Lock_time: 0.000109 Rows_sent: 1  Rows_examined: 8131



您对本贴的看法:
| |

精灵




CU编号: 493918
注册:2006-11-22
最后登录: 2009-05-10
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-10 23:55 
但这样不能打印匹配行的下一行。



您对本贴的看法:
| |
(狼烟)
精灵王
披着狼皮的羊



CU编号: 547805
注册:2007-4-5
最后登录: 2009-05-10
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-10 23:56 
用sed比较数值比较麻烦,这个是awk的。

CODE:
awk '/Query_time/&&$3>30{print;getline;print}' URFILE




您对本贴的看法:
| |

风云使者




CU编号: 692772
注册:2008-4-16
最后登录: 2009-05-11
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-11 00:01 
grep -P -A1 'Query_time(?=: ([0-9]{3,}|[3-9][0-9])\.)'

[ 本帖最后由 justlooks 于 2009-5-11 00:02 编辑 ]



您对本贴的看法:

__________________________________

GNU sed 版本 4.1.5   
GNU awk 3.1.5
grep 2.5.1
http:://justlooks.8800.org
三个月内一定要找到工作.......
b20c68726c6421686f20776f6848656c6c89e16301b004cd80b00131dbcd80
| |

精灵




CU编号: 493918
注册:2006-11-22
最后登录: 2009-05-10
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-11 00:12 


QUOTE:
原帖由 kwokcn 于 2009-5-10 23:56 发表
用sed比较数值比较麻烦,这个是awk的。

awk '/Query_time/&&$3>30{print;getline;print}' URFILE

非常感谢,这个方法是可行的。



您对本贴的看法:
| |

精灵




CU编号: 493918
注册:2006-11-22
最后登录: 2009-05-10
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-11 00:14 


QUOTE:
原帖由 justlooks 于 2009-5-11 00:01 发表
grep -P -A1 'Query_time(?=: ([0-9]{3,}|[3-9][0-9])\.)'

谢谢,你的方法也可以,但是会多输出一行,内容是 "--"
但这个的扩展性差了点,如果想把30改为 100或别的值就有点麻烦了,代码里要改的地方就太多了点。
还是得谢谢你:)



您对本贴的看法:
| |
(暗夜星空)
精灵使
休息休息



CU编号: 713644
注册:2008-6-3
最后登录: 2009-05-11
帖子:
精华:0







来自:广州<-->杭州
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-11 08:24 
回复 #4 kwokcn 的帖子

这个方法不错,学习了。



您对本贴的看法:

__________________________________

有时候回答问题是信口开河......
因此不保证所有回复问题的答案的准确性.
如果正好是对的,那是碰到了死耗子..呵呵.
想着休息,不想做事!
| |
  帅哥 (小飞)
风云使者
出来混,早晚是要还的



CU编号: 388356
注册:2006-3-18
最后登录: 2009-05-11
帖子:
精华:0







来自:大连
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-11 08:27 
回复 #8 我是DBA 的帖子

:mrgreen: :mrgreen: 不愧是水王



您对本贴的看法:

__________________________________

心灵像上帝,行动如乞丐!

| |
  帅哥
精灵王




CU编号: 690903
注册:2008-4-13
最后登录: 2009-05-11
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-5-11 08:43 
回复 #1 nonamexz 的帖子

grep -A1 'Query_time' urfile | sed -n 'N;s/\n/###/p' | awk '/Query_time/{if($3>30) print}' |sed 's/###/\n/'



您对本贴的看法:

天使




CU编号: 745494
注册:2008-8-15
最后登录: 2009-05-11
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-11 08:47 


CODE:
awk '/Query_time/{if($3>30){matched=$0;getline;print matched"\n"$0}}' file

还有烈火个火王没过来呢



您对本贴的看法:

__________________________________
阅读(492) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~