我有一个这样的日志文件:
[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
到固定宽度的表中。
-
请注意,如果您的任何行具有不同的、:
或(
空格组合,则此操作将不起作用。