bash - 如何在没有“awk”的情况下逐行获取文件信息
问题描述
我有一个文件
192.168.10.1 - - [12/aug/20:23:30:41] "PUT /img.jpg" 200 -
192.168.10.2 - - [10/aug/20:01:20:30] "PUT /img.jpg " 404 -
192.168.10.2 - - [10/aug/20:12:10:15] "PUT /img.jpg " 200 2114
192.168.10.3 - - [09/aug/20:06:20:12] "GET / img.jpg" 200 377
192.168.10.1 - - [07/aug/20:12:40:20] "GET /img.jpg" 200 2114
192.168.10.1 - - [01/aug/20:06:45:50] "GET /img.jpg" 404 -
我想计算文件中的每一行,其中以 2 开头的行的倒数第二个数字,例如,文件中存在 3 次 192.168.10.1,但 192.168.10.1 只有 2 行是 200,1 是 404。所以我只想数 2 行
192.168.10.1 2
192.168.10.2 1
192.168.10.3 1
解决方案
这可以通过多种方式完成,其中一种方式是使用 awk、sort 和 uniq 命令的组合
awk -F ' ' '$(NF-1) ~ /^2/ {print $1}' log_file.txt | sort | uniq -c | sort
解释:
- awk -F ' ' '$(NF-1) ~ /^2/ {print $1}' --> 这将检查倒数第二列是否以“2”开头,如果是,它将打印第一列,即 IP地址
- sort --> 将对输出进行排序
- uniq -c --> 将告知一行重复了多少次,以及重复的次数。
推荐阅读
- python - 在python中将十进制数转换为任何其他基数(2<=base<=36)
- c# - 如何存储到会话中并显示当前用户信息
- c++ - c++中的for-each循环用于二维数组
- c# - Autofac 没有找到任何构造函数
- node.js - 具有 TCP/IP 地址的串行 IP 调制解调器设备
- apache-spark - 使用 Spark DataFrame 转置表
- android - 房间数据库查询返回空列表
- android - 以编程方式更改 DatePicker 文本
- java - 在休眠中提及类型信息
- powerbi - 如何在不同的数据源链接中使用相同的已发布 PowerBI 报表?