[英]Extract part of Column Awk
我正在尝试计算日志文件中搜索到的术语每秒发生的次数。 我一直在使用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]
}
( 参考 ),或简单地将输出通过管道传递给| sort
| sort
您可以做的一件事是:
awk 'BEGIN{FIELDWIDTHS = "1 11 1 12"} {print $4}' datetimes
指定字段宽度,然后例如,这将为您提供时间。 如果您不关心毫秒,请选择"1 11 1 8 4"
您可以将substr用作行的数组索引。 例如,您有此文件
cat 1.txt
[01/May/2018:23:59:59.532
[01/May/2018:01:59:59.848
[01/May/2018:02:59:59.851
[01/May/2018:02:59:59.911
[01/May/2018:02:59:59.923
[01/May/2018:02:00:59.986
你可以这样使用awk命令
cat 1.txt | awk '{a[substr($0,index($0,":")+1,8)]++} END{for(i in a) print i" - "a[i]}'
其中substr($ 0,index($ 0,“:”)+ 1,8)从第一个“:”的内容中切出8个字符,将其用作数组的索引
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.