Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 最常见的IP地址bash脚本的Apache访问日志_Linux_Bash_Awk_Ip Address - Fatal编程技术网

Linux 最常见的IP地址bash脚本的Apache访问日志

Linux 最常见的IP地址bash脚本的Apache访问日志,linux,bash,awk,ip-address,Linux,Bash,Awk,Ip Address,所以我在一个apache日志文件上运行一个bash脚本,我可以对IP地址进行排序,并在上面显示最常见的地址,但它在页面底部显示不在顶部如何从最高到最低显示它 这是我目前的剧本 cat access_log.txt | awk '{print $1}'| uniq -c |sort -n -k 1| tail 在我的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.2

所以我在一个apache日志文件上运行一个bash脚本,我可以对IP地址进行排序,并在上面显示最常见的地址,但它在页面底部显示不在顶部如何从最高到最低显示它

这是我目前的剧本

cat access_log.txt | awk '{print $1}'| uniq -c |sort -n -k 1| tail
在我的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
输出是

2 8.45.98.250
4 250.40.56.78
6 10.23.234.0
我希望输出是

6 10.23.234.0
4 250.40.56.78
2 8.45.98.250
还想将是最好的方式打印出旁边的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)"  
是的

66.249.73.234 - http://www.google.com.html
谢谢

您可以使用:

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

排序中的
r
为反向


获取html数据的步骤

awk '{split($0,a,"http|[)]");print $1" - http"a[2]}' file
66.249.73.234 - http://www.google.com/bot.html

仅针对前两个记录的顶级打印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'

-r
传递给排序命令以反转排序顺序。使用标准
awk
可能很难做到这一点。但我添加了一个示例,1)计算所有ip/dns。2) 分类。3) 仅打印前两条记录的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'