我有一个文件
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 -
我想计算文件中的每个LIne,其中以2开头的行的倒数第二个数字,例如192.168.10.1在文件中存在3次,但只有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/{打印$1}'->这将检查倒数第二列是否以"0"开头;2〃;,如果是,它将打印第一列,即IP地址
- 排序-->将对输出进行排序
- uniq-c->将告诉一行重复了多少次,以及重复的次数
使用命令行实用程序:
grep '^[^"]*"[^"]*" 2' logfile |
cut -d' ' -f1 | sort | uniq -c | sort -nr | head -n 10
这列出了按尝试次数排序的前十个IP地址。