从bash中的字符串中提取日期和时间

塔迪娅·巴加里奇

我正在解析一些日志文件,只想提取日期和时间数据。日志文件如下所示:

2017-03-01 12:00:15.896 Sync DeliveryContacts: 00:00.011(00.011) end
2017-03-01 12:00:16.473 SyncTables(): 00:00.293(00.293) end
2017-03-01 12:02:48.636 00:00.000(00.000) end

编辑 - 这也是文件中可能的一行:

2017-03-01 12:00:15.896 Sync Delivery Contacts: 00:00.011(00.011) Started with predefined delay (10:00.000) end

我想得到 3 个这样的列:

[YYYY-MM-DD] [hh:mm:ss.000] [mm:ss.000]

或者:

2017-03-01 12:00:15.896 00:00.011
2017-03-01 12:00:16.473 00:00.293
2017-03-01 12:02:48.636 00:00.000

字符串将始终以 DateTime(前 2 列)开头,第二次数据将始终为 9 个字符长。

我试过了:

fgrep "end" *.txt -a /
 | awk '{ print $1 " " $2 " " $4 }'

但这仅适用于我的示例中的第二行。

我想我可以用 awk 获得前 2 列,但不知道如何获得 3 列。

罗曼·佩雷克雷斯特

使用单目瞪口呆的方法:

awk '{r=""; for(i=3;i<=NF;i++){ r=r$i }; 
      match(r, /\<([0-9]{2}:[0-9]{2}\.[0-9]{3})\(/, a); print $1,$2,a[1];}' file

输出:

2017-03-01 12:00:15.896 00:00.011
2017-03-01 12:00:16.473 00:00.293
2017-03-01 12:02:48.636 00:00.000

for(i=3;i<=NF;i++){ r=r$i }; - 从第三个字段开始连接字段值

match(r, /([0-9]{2}:[0-9]{2}.[0-9]{3})\(/, a)- 匹配[mm:ss.000]“收集”字段数据中的时间数据

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章