linux - 提取 message.log 文件中部分时间戳的 Shell 脚本程序

标签 linux bash shell

我在 var/log/messages.log 中有如下数据,现在我需要搜索 WAM 数据行并仅提取部分时间戳

例如

2013-07-09T02:22:28.535639Z [24] user.info WebAppMgr WAM APPLAUNCH_INITIATED

上面一行包含WAM,我只需要22:28.535639Z messages.log中的数据

2013-07-09T02:22:28.535639Z [24] user.info WebAppMgr WAM APPLAUNCH_INITIATED 
2013-07-09T02:22:21.817372Z [17] user.info sam SAM  ^Icom.palm.app.calculator
2013-07-09T02:22:21.818442Z [17] user.info sam SAM  ^Icom.palm.app.settings
2013-07-09T02:24:04.738067Z [120] user.info WebAppMgr WAM APPLAUNCH_INITIATED 
2013-07-09T02:22:21.846636Z [17] user.info sam SAM  ^Icom.palm.app.notes
2013-07-09T02:22:21.851727Z [17] user.info sam SAM  ^Icom.palm.app.firstuse
2013-07-09T02:22:21.854172Z [17] user.info sam SAM  ^Icom.palm.app.isis2
2013-07-09T02:22:21.863786Z [17] user.info sam SAM  ^Icom.palm.sysapp.voicedial
2013-07-09T02:24:04.746751Z [120] user.info WebAppMgr WAM APP CREATED WINDOW

我能够提取 2013-07-09T02:22:28.535639Z。我需要知道如何提取 22:28.535639Z

#! /bin/sh
awk '/\ WAM/ {print $1"\t"}' /home/santosh/messages

我得到这样的输出

2013-07-09T02:22:28.535639Z
2013-07-09T02:24:04.738067Z
2013-07-09T02:24:04.746751Z

但我只需要下面的数据

22:28.535639Z
24:04.738067Z
24:04.746751Z

最佳答案

您可以在当前的 awk 调用中执行此操作:

awk '/\<WAM\>/ {split($1, a, ":"); print a[2] ":" a[3]}' file

\<\>是词边界断言。

关于linux - 提取 message.log 文件中部分时间戳的 Shell 脚本程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553975/

相关文章:

bash - 如何枚举文件列表

linux - shell脚本查找哪个用户第一次登录

python - 我如何在 X 中获得第一个未使用的显示?

linux - 在 Linux 上保存原子文件而不丢失元数据

linux - 如何在shell中加密和解密字符串/文本(linux环境)

bash 脚本在获取时产生不同的结果

linux - 从根 bash 脚本以非根身份运行文件

java - 无法在java代码中运行命令

java - 在 Linux 终端编译一个 Net beans 创建的项目

c - semop 调用中 EIDRM 和 EINVAL errno 之间的区别