gpt4 book ai didi

linux - 提取列 Awk 的一部分

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:09 25 4
gpt4 key购买 nike

我正在尝试计算日志文件中每秒出现的搜索词的次数。我一直在使用 AWK,并且发现时间戳位于带有附加信息的列中。是否可以仅通过查找时间模式 00:00:00 - 24:00:00 来获取每秒出现的次数?

数据示例:

[01/May/2018:23:59:59.532
[01/May/2018:23:59:59.848
[01/May/2018:23:59:59.851
[01/May/2018:23:59:59.911
[01/May/2018:23:59:59.923
[01/May/2018:23:59:59.986
[01/May/2018:23:59:59.988
[01/May/2018:23:59:59.756
[01/May/2018:23:59:59.786
[01/May/2018:23:59:59.883

到目前为止,我可以使用以下方法轻松提取数据:

awk '/00:00:00/,/24:00:00/{if(/search_term/) a[$4]++} END{for(k in a) print k " - " a[k]}' file.log |sort

这将返回:

[02/May/2018:10:40:05.903 - 1
[02/May/2018:10:40:05.949 - 1
[02/May/2018:10:40:05.975 - 1
[02/May/2018:10:40:05.982 - 2
[02/May/2018:10:40:06.022 - 1
[02/May/2018:10:40:06.051 - 1
[02/May/2018:10:40:06.054 - 1
[02/May/2018:10:40:06.086 - 1
[02/May/2018:10:40:06.094 - 1
[02/May/2018:10:40:06.126 - 1

我的目标是更多:

10:40:05 - 5
10:40:06 - 6

不知道我是否正确地考虑了这一点。总的来说是 AWK 的新手。

最佳答案

使用冒号和点作为字段分隔符,我们在 col2 中有小时,在 col3 中有分钟,在 col4 中有秒

awk -F'[:.]' '
{count[$2 ":" $3 ":" $4]++}
END {for (time in count) print time " - " count[time]}
' file
10:40:05 - 4
10:40:06 - 6

输出不一定要排序。如果您使用的是 GNU awk,请使用

END {
PROCINFO["sorted_in"] = "@ind_str_asc"
for (time in count)
print time " - " count[time]
}

( reference ),或者简单地将输出通过管道传输到 |排序

关于linux - 提取列 Awk 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50143694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com