当前位置: 技术问答>linux和unix
Linux下shell对(dmesg)出来的信息作一个处理
来源: 互联网 发布时间:2016-11-26
本文导语: > dmesg [15503.860859] a [15504.368680] b [15504.876471] c [15505.376537] d [15505.885350] e 我想做一个实时监视dmesg信息的脚本, 比如第一次我打印了a那一行;过来2秒,dmesg所在文件有了b到e这几行,我只想打印b到e的那几行,一直这...
> 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等等
[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'/'
试试
改成
dmesg | awk '/'$last_line_msg'/{getline;print},/'$now_line_msg'/'
试试
|
用临时文件倒换一下呢
mv f.new f.old
dmesg >f.new
comm -13 f.old f.new
mv f.new f.old
dmesg >f.new
comm -13 f.old f.new