awk转换dmesg输出的时间信息为标准时间信息
作者:互联网
系统:CentOS Linux release 7.4.1708 (Core)
dmesg输出:
[ 31.804310] bnx2x 0000:01:00.3 em4: using MSI-X IRQs: sp 96 fp[0] 98 ... fp[7] 105
[ 32.104099] virbr0: port 1(virbr0-nic) entered disabled state
[ 69.054610] fuse init (API version 7.22)
[ 137.552288] TCP: lp registered
[ 271.929875] usb 2-1.2: USB disconnect, device number 3
[85557.251323] Ebtables v2.0 unregistered
[95405.091843] sdb: sdb1
[95405.341079] sdc: sdc1
[95405.596710] sdd: sdd1
一行开头的[]中显示的时间信息,是表示事件发生时,系统已经启动的时间,可以利用/proc/uptime中信息(该文件第一列表示系统至今的启动时间)来进行计算转换。脚本如下:
#! /bin/bash awk '{ "head -1 /proc/uptime" | getline upts; split(upts, arrtimes, /[ \t]/); uptime = arrtimes[1]; sub(/\[/, "", $0); sub(/\]/, "", $0); "date +%s.%N" | getline syst #print syst t = syst - uptime + $1; secs = int(t); millis = int((t - secs) * 1000); $1 = strftime("%Y-%m-%d %H:%M:%S", t)","sprintf("%03d", millis); print $0 }'
将上面内容放到一个bash脚本中,比如show.sh,然后加上可执行权限,那么就可以通过下面命令查看转换后的信息:
dmesg | ./show.sh
也可以将上面awk的代码改成可执行awk脚本文件来执行操作。
ps: 忘了可以使用 dmesg -T,傻了
标签:dmesg,uptime,arrtimes,syst,信息,awk 来源: https://www.cnblogs.com/csmountains/p/14362998.html