我想在 unix 中格式化我的应用程序日志

我想在 unix 中格式化我的应用程序日志

我有一个这样的日志文件:

[loggerid:1234-4567] api:api1() 5.91
[loggerid:7899-45671234] api:api12345() 11.00
[loggerid:3333-45671234564] api:api12345789() 11.05

我需要这样的输出:

  • 第一列应该是:和之间的字符串-
  • 第二列应该是:和之间的字符串(
  • 我只需要第 3 列 > 10 的行。
  • 所有列的宽度都应固定
7899 api12345    11.0 
3333 api12345789 11.05

答案1

awk假设您的所有行都遵循该精确模式,则可以使用和的组合column(第二个将帮助您获得固定宽度的字段):

$ awk -F'[-: (]' '$NF>10{print $2,$5,$NF}' log | column -t
7899  api12345     11.00
3333  api12345789  11.05

解释

* awk -F'[-: (]':将 awk 的字段分隔符设置为-:(空格中的任意一个。这使我们能够找到您想要作为字段的子字符串。

  • $NF>10:如果最后一个字段(NF是字段数,也是$NF最后一个字段的值)大于 10。
  • print $2,$5,$NF::打印第二个字段(在本例中为第一个和第一个之间的值)、第五个字段(此处为第二个和第一个-之间的值)和最后一个字段。:(

awk最后,我们将其输出传递column -t到固定宽度的表中。

-请注意,如果您的任何行具有不同的、:(空格组合,则此操作将不起作用。

相关内容