dmesg有-T打印人类可读时间戳的选项--time-format,新版本有选项,可以更改时间格式,例如:
--time-format iso
Run Code Online (Sandbox Code Playgroud)
不幸的是,iso时间格式也不太可读。我可以使用标准date语法定义我自己的时间格式吗?IE:
date +%F-%T
Run Code Online (Sandbox Code Playgroud)
gawk是的,您可以,例如,通过使用(GNU )重新格式化时间,awk如下所示:
dmesg --time-format iso | gawk '{ printf (strftime("+%F-%T",mktime(gensub("[-+T:,]"," ","g",$1)))) ; $1 = ""; print $0}'
Run Code Online (Sandbox Code Playgroud)
dmesg在这里打印 iso 日期,如下所示:
2019-09-02T06:10:30,708864+02:00 this is an important message
Run Code Online (Sandbox Code Playgroud)
我们去掉第一个字符串中的特殊字符,然后使用mktime( g)中的函数awk将字符串解析为日期,然后strftime进行格式化 - 使用您最喜欢的参数。
这给出了类似的东西
+2019-09-02-06:10:30 this is an important message
Run Code Online (Sandbox Code Playgroud)
小注意事项:
我们在这里忽略时区,假设这是显而易见的,因为我们在本地运行命令。
请注意,如果您由于时间戳的存储方式而暂停然后唤醒计算机,则给出的时间dmesg可能不准确(事实上,有时会很不准确),请参阅dmesg(1):
man 1 dmesg
Run Code Online (Sandbox Code Playgroud)