加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 确定bash中具有awk或类似内容的唯一行数

发布时间:2020-12-13 17:05:16 所属栏目:Linux 来源:网络整理
导读:我正在使用AWK来读取我的自定义日志文件.格式是这样的: [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.4:8091 HTTP/1.0" 200 现在,我有AWK(来自bash)设置读取整个日志,分析每一行并抓住包含“CONNECT”的每一行,但是,它不能帮助我发现独特的客户
我正在使用AWK来读取我的自定义日志文件.格式是这样的:
[12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.4:8091 HTTP/1.0" 200

现在,我有AWK(来自bash)设置读取整个日志,分析每一行并抓住包含“CONNECT”的每一行,但是,它不能帮助我发现独特的客户端.

这样做的方法是以某种方式过滤它,以便分析每一行的这一部分:
“CONNECT 192.168.2.4:8091 HTTP / 1.0”

如果有一种方法可以获取日志文件中的所有这些行,那么将它们全部进行比较,只计算类似的行.所以,让我们说,例如:

[12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.6:8091 HTTP/2.0" 200
 [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.9:8091 HTTP/2.0" 200
 [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.2:8091 HTTP/2.0" 200
 [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.9:8091 HTTP/2.0" 200

在这种情况下,我需要的答案是3,而不是4.因为2行是相同的,所以只有3个唯一的行.我需要的是使用AWK实现此目的的自动化方法.

如果有人能伸出援助之手会很棒.

解决方法

你可以让awk计算这样的唯一实例:
awk -F" '/CONNECT/ && !seen[$2] { seen[$2]++ } END { print length(seen) }' logfile

输出:

3

这将从看到的哈希数组中包含CONNECT的行收集第一个双引号字符串.到达输入结束时,将打印所看到的元素数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读