日期:2014-05-16  浏览次数:20749 次

Linux下shell对(dmesg)出来的信息作一个处理
> dmesg
[15503.860859] a
[15504.368680] b
[15504.876471] c
[15505.376537] d
[15505.885350] e

我想做一个实时监视dmesg信息的脚本, 比如第一次我打印了a那一行;过来2秒,dmesg所在文件有了b到e这几行,我只想打印b到e的那几行,一直这样循环,如果没有b到e,就不打印.


我先给出我想到的思路:
> dmesg | awk '{print $1}'
[15503.860859] 
[15504.368680] 
[15504.876471] 
[15505.376537] 
[15505.885350]
看到了吧,上面[...]每一行都是不一样的,应该是时间信息; 第一秒取a行前面的15503.860859保存到一个变量中,同时打印这一行; 过了两秒,我再去检测dmesg这个文件最后一行e的前面的是15505.885350,这个不等于a的15503.860859,然后我就打印b到e的信息,同时记住e最前面的15505.885350; 为下一个2秒作准备;

谁能帮忙分析一下,这个shell如何写,用sed、awk、grep等等





------解决方案--------------------
dmesg | awk '/'$last_line_msg'/,/'$now_line_msg'/'
改成
 dmesg | awk '/'$last_line_msg'/{getline;print},/'$now_line_msg'/'

试试

------解决方案--------------------
用临时文件倒换一下呢

mv f.new f.old
dmesg >f.new
comm -13 f.old f.new