use*_*020 5 linux bash awk ip-address
所以我在apache日志文件上运行bash脚本,我可以对IP地址进行排序,并在其中显示最常见的地址,但是它在页面底部显示了它,而没有在顶部显示如何从最高到最低显示它
到目前为止,这是我的剧本
cat access_log.txt | awk '{print $1}'| uniq -c |sort -n -k 1| tail
Run Code Online (Sandbox Code Playgroud)
在我的txt文件中
10.23.234.0
250.40.56.78
8.45.98.250
10.23.234.0
250.40.56.78
8.45.98.250
10.23.234.0
250.40.56.78
10.23.234.0
250.40.56.78
10.23.234.0
10.23.234.0
Run Code Online (Sandbox Code Playgroud)
输出是
2 8.45.98.250
4 250.40.56.78
6 10.23.234.0
Run Code Online (Sandbox Code Playgroud)
我希望输出是
6 10.23.234.0
4 250.40.56.78
2 8.45.98.250
Run Code Online (Sandbox Code Playgroud)
也希望这是在其旁边打印出DNS名称的最佳方法,因此示例
66.249.73.234 - - [12/Fegb/2013:12:00:09 +1100] "GET /java/tut/tut.sgml-065.html HTTP/1.1" 200 752 "-" "Mozilla/6.0 (compatible; Googlebot/2.1; +http://www.google.com.html)"
Run Code Online (Sandbox Code Playgroud)
所以会的
66.249.73.234 - http://www.google.com.html
Run Code Online (Sandbox Code Playgroud)
谢谢
你可以使用这个:
awk '{a[$1]++} END {for (i in a) print a[i],i | "sort -rnk1"}' access_log.txt
5 10.23.234.0
4 250.40.56.78
2 8.45.98.250
1 10.23.234.0
Run Code Online (Sandbox Code Playgroud)
或者
awk '{a[$1]++} END {for (i in a) print a[i],i}' access_log.txt | sort -rnk1
Run Code Online (Sandbox Code Playgroud)
r排序是相反的
获取html数据
awk '{split($0,a,"http|[)]");print $1" - http"a[2]}' file
66.249.73.234 - http://www.google.com/bot.html
Run Code Online (Sandbox Code Playgroud)
顶部仅打印前两条记录的 DNS。
awk '{split($0,b,"http|[)]");a[$1" - http"b[2]]++} END {for (i in a) print a[i],i}' file | sort -rnk 1 | awk 'NR>2 {$0=$1FS$2} 1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2522 次 |
| 最近记录: |