|
发表于 2004-4-10 23:04:08
|
显示全部楼层
最初由 r2007 发表
有点复杂,请楼主先试试吧。
- /^### EVENT ###/ {
- x
- G
- : a
- N
- /\n### END EVENT ###/ !b a
- N
- /\nPARSING_FAILED/ {
- s/\n\n/\n/g
- N
- p
- }
- }
- h
复制代码
r2007兄,你的脚本有bug。楼主的第一个要求就是"去掉头尾空行"。你的脚本没有做到这一点。
请看你的脚本的过滤结果(注意尾部空行没有去掉):
----------------------------------------------------------------
1~906072~458748239(Apr 08 time 2004)
### EVENT ###
kdieiejr
jkjviej
### END EVENT ###
PARSING_FAILED
1~906073~8782293(Apr 08 time 2004)
### EVENT ###
ierueio
dkjfire
### END EVENT ###
PARSING_FAILED
-------------------------------------------------------------------
我给出我的改进awk脚本,它满足了楼主的所有要求,并且有很好的强壮性以及扩展性(这就是awk相对于sed的好处,而且awk脚本的可读性更好)。
- #--log's filter--
- #
- # Written by home_king <home_king@163.com>
- #
- /^[0-9]/,/PARSING_FAILED/{
- if($0 ~ /^[0-9]/){
- if(cnt==2){
- print ""
- print $0
- next
- }
- cnt++
- }
- if(cnt==2 && $0 !~ /^$/){
- print $0
- }
- }
复制代码
过滤结果:
---------------------------------------------------------------------
1~906072~458748239(Apr 08 time 2004)
### EVENT ###
kdieiejr
jkjviej
### END EVENT ###
PARSING_FAILED
1~906073~8782293(Apr 08 time 2004)
### EVENT ###
ierueio
dkjfire
### END EVENT ###
PARSING_FAILED
------------------------------------------------------------------- |
|