|
|
第 16 帖 | |
|
|
呵呵,只是就正常的日志逻辑,在下猜想而已。r2007兄教训的是。
![]()
__________________
IBOX, a LiveCD distribution based on Gentoo, is fit for newbie. IBOX brings to you: - knoppix-style harddisk installation tool, by which you can install Gentoo in 20 minutes. - hardware auto-configuration. You can run into X desktop directly. - all-round software set, including OpenOffice, azureus. - LiveCD-create-tools. Step-by-step, custom a LiveCD yourself with ease. Any questions and feedbacks is welcome to home_king at 163 dot com |
|
|
|
|
|
|
|
第 17 帖 | |
|
|
非常感谢home_king和r2007两位高手对此问题的深入研究!!!!!连我真的都没有想到这样的深度。原来是因为同事对其中PARSING_FAILED的内容要求的急,我也没有仔细的查看这个log文件的逻辑。看了两位对这个问题的分析后,我也认真的看了一下此log文件的特征(这个log有100000多行,为了不漏掉一些特殊的地方,看了整整2个小时,看到我流眼泪,现给出此文件的通项结构: (由于是程序生成的log文件,内容还算是很工整的。)
----------------------------------------------------------- (文件最开头的空格) 1~Procoess ID ~UnixTimeFormat(Human Readable Time) ### EVENT ### Contents (no blank new line. Could be multiple lines.) (BLANK NEW LINE as the separator) ### END EVENT ### Receiptor Action (Only have two values: PROCESSED or PARSING_FAILED) (BLANK NEW LINE as the separator) ------------------------------------------------------------- 根据以上的通项,可以给出两个通项的列子(非真实数据): --------------------------------------------------- 1~906098~4345678(Apr 09 20:03:59 2004) ### EVENT ### eihvtkv euiaek=1aee eiiiovn="kwioeir3ad" lcbjieio ### END EVENT ### PROCESSED 1~906099~458748239(Apr 08 21:33:45 2004) ### EVENT ### kdieiejr jkjviej eeku3="wefa1f3" kl843fkl3="lsdjfirenvksndvir" kwei3 klvjlkjq ### END EVENT ### PARSING_FAILED ------------------------------------------------------------ 这样的话,有几点就清楚了: 1。 时间戳的格式是固定的。一定是 “1~Process ID~UnixTimeFormat(Human Readable Time) 至于为什么是"1~"开头,我也不清楚。 2. EVENT的内容的长度,即Contents 的行数不是固定的。但是肯定没有空行。 3. "### END EVENT ###"前是肯定有空行的。 4. "### END EVENT ###"之后的字串只有两种可能: PROCESS or PARSING_FAILED. 5. 教主说的”域间分布不均匀性“是客观存在。(真对不起,最先的列子看不到这一点。)因为EVENT log中的PROCESSED和PARSING_FAILED是随机的,处理成了就是PROCESSED, 没有成功就是PARSING_FAILED. 所以它们出现的次序是无序的。 5.关于最后的一个空行的问题,因为我没有看到构造程序的源码,所以我不能确定,但是我认为最大可能是这个空行包括在了每一个EVENT生成的那段脚本中。,因为这是一个无限append的log文件,当时看到的只是那个时间点的EOF。 不知我是否解释了两位的一些疑点。shell版的学术研究氛围很浓,多得象两位这样的高人带动。在下受益匪浅!多谢多谢!
__________________
15" C2D MBP. 有简单的,不用复杂的!看到复杂的,尽量简单化! Unix/Linux Philosophy: Be small! Be concentrated! One program does one thing and do it perfectly! ∞ years - 宇宙中最后的物质 Proton heat death. 之后,宇宙将以纯能量的形式永远存在。。。一切皆空 |
|
|
|
|
|
|
|
第 18 帖 | |||
|
|
引用:
引用:
1. 你的时间戳以数字开头,以括号结尾。 代码:
2. 内容行数不是问题,因为我的脚本不是根据这个来过滤的。 3. 至于域间空行,通通都会过滤掉,所以空行的行数无关系。 4. 这两种可能我的脚本都兼顾到,甚至还有扩展性,除了PROCESS or PARSING_FAILED,任意字符串都会被脚本识别。 5. 没错,域间分布不均匀性被脚本解决了。 6. 最后一个空行是无关重要的,如果存在,它总会被我的脚本过滤掉,请看这段巧妙的代码,我是在每个域上根据上下文加入空行的,而非在域下加空行(这有可能造成文件末尾带有空行) 代码:
在下的工具观是,sed作为gawk的预处理或者末尾处理工具,而gawk是解决复杂问题的核心工具。 希望兄弟们也要参与这个shell氛围,贡献自己的一份力。在下课业繁重,有时侯兼顾不了。呵呵~~ 此帖于 04-04-12 10:56 被 home_king 编辑. |
|||
|
|
|
|||
|
|
第 19 帖 | |
|
|
r2007 DX,看来看去不懂你的代码,能否具体介绍一下吗?
|
|
|
|
|
|
|
|
第 20 帖 | |
|
|
标题: 我这里用sed另外写了一个 没有嵌套,也许更好理解些:
代码:
此帖于 04-04-13 17:46 被 wire 编辑. |
|
|
|
|
|
|
|
第 21 帖 | ||
|
|
引用:
|
||
|
|
|
||
|
|
第 22 帖 | |
|
|
通过应用于真实数据源,wire兄的代码除了首行空行外,完全过滤出了我需要的数据,也解决了域分布不均的问题,不知wire兄是否能解释一下你的代码呢!感谢!
|
|
|
|
|
|
|
|
第 23 帖 | ||
|
|
引用:
看来楼主很喜欢"短命令",不过这恰恰是在下的弱项,呵呵~~~我比较注重扩展性。 |
||
|
|
|
||
|
|
第 24 帖 | |
|
|
这段代码主要是利用sed里的hold space,它可以看作是一个缓冲区;原理其实很简单:sed在处理每行数据时,如遇到PROCESSED时清掉该缓冲,遇到PARSING_FAILED就将缓冲内容打印出来,其它的字符则追加到缓冲里。
首行空行的问题,将代码稍稍修改也可以解决: 代码:
|
|
|
|
|
|
|
|
第 25 帖 | ||
|
|
不同的思路,对代码的复杂程度有很大的影响。
wire的思路 引用:
代码:
个人观点,请楼主参考。 |
||
|
|
|
||
|
|
第 26 帖 | |
|
|
嗯,r2007兄说的很对。我个人认为最重要的是准确!准确的数据输出是很重要的,因为经常的一些数据输出又是要feed到另外的程序中成为数据输入,如果不准确,产生的结果不可想象。在正确的获得数据的基础上,我才考虑代码的复杂程度。这也就是我偏向于取简单代码的原因,因为不管是r2007兄的,还是wire兄的,还是我们教主的,输出的数据都是符合要求的,是正确的。我都会一一保存并加以研究。我sed和awk都是刚学,不精,这样的代码,我还是要一段时间啃一啃的。
另外,根据最新的log数据和程序员的介绍(最后我还是找到了他), ### END EVENT ### 后的字串并不是只有PROCESSED和PARSING_FAILED, 其实还有QUEUED和WAITING,只是这两种情况出现很少,但是还是有的。不知各位的代码扩展性如何,如果有这两种情况,是否也能排除呢? 谢谢了! |
|
|
|
|
|
|
|
第 27 帖 | |
|
|
另复r2007上帖:
PARSING_FAILED字串是不会出现在EVENT body中的。所有对EVENT处理的四种结果(PROCESSED, PARSING_FIELED, QUEUED, WAITING)都只会在### END EVENT ###后出现,这是程序代码的结构。不过作为纯的扩展性研究,我认为情况可以设想的多些。只要最后能有一定的规律可寻就行。 |
|
|
|
|
|
|
|
第 28 帖 | ||
|
|
to yongjian:
我的脚本完全实现了你所说的功能。因为我的预想与你的实际情况是一致的。它具有很好的扩展性。 引用:
此帖于 04-04-15 00:34 被 home_king 编辑. |
||
|
|
|
||
|
|
第 29 帖 | |
|
|
我那段烦琐的没有用到PROCESSED进行判断,应该不用修改,wire的需要修改一下。
|
|
|
|
|
|
|
|
第 30 帖 | |
|
|
如果 ### END EVENT ### 后的字串还有QUEUED和WAITING或更多的话,则要如下修改:
将第一个正则式放入所有不需打印的特征串;第二个放入所有要打印的特征串;结构不用修改。 如:仅打印PARSING_FAILED的记录 代码:
代码:
|
|
|
|
|
|