dmesg:自定义时间格式

dmesg:自定义时间格式

dmesg可以选择-T打印人类可读的时间戳,新版本有选项--time-format,可以更改时间格式,例如:

--time-format iso

不幸的是,iso时间格式也不太好读。我可以使用标准date语法定义自己的时间格式吗?即:

date +%F-%T

答案1

你不能,但你可以解析dmesg-output:

dmesg --time-format iso \
| while read datestring rest; do \
  printf '%s\n' "$(date -d "$datestring" +%F-%T) $rest"; done

答案2

gawk是的,您可以,例如,通过使用(GNU )重新格式化时间,awk如下所示:

dmesg --time-format iso | gawk '{ printf (strftime("+%F-%T",mktime(gensub("[-+T:,]"," ","g",$1)))) ; $1 = ""; print $0}'

dmesg在这里打印 iso 日期,如下所示:

2019-09-02T06:10:30,708864+02:00 this is an important message

我们去掉第一个字符串中的特殊字符,然后使用mktime( g)中的函数awk将字符串解析为日期,然后strftime进行格式化 - 使用您最喜欢的参数。

这给出了类似的东西

+2019-09-02-06:10:30 this is an important message

小注意事项:

  • 我们在这里忽略时区,假设这是显而易见的,因为我们在本地运行命令。

  • dmesg请注意,如果您由于时间戳的存储方式而暂停然后唤醒计算机,则给出的时间可能不准确(事实上,有时会很不准确),请参阅dmesg(1)

    man 1 dmesg
    

相关内容