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, /[ 	]/);
        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,傻了



原文地址:https://www.cnblogs.com/csmountains/p/14362998.html