gpt4 book ai didi

awk - 建立具有数量的IP分配

转载 作者:行者123 更新时间:2023-12-04 18:14:48 24 4
gpt4 key购买 nike

我尝试在DDoS之后对大型日志文件执行awk时,获得更多的dtrace样式分发输出,以便于读取输出:

# tail -1000 access_log | awk '{ print $1 }' | sort | uniq -c | sort -nr | awk '{printf("\n%s ",$0) ; for (i = 0; i<$1 ; i++) {printf("*")};}'

43 192.168.0.1 *******************************************
38 192.168.0.2 **************************************

希望它看起来像:
       value  ------------- Distribution ------------- count    
192.168.0.1 @@@@@@@@@ 43
192.168.0.2 @@@@@@@@ 38

@是数字的较小汇总,而*是数字的*。相对于我必须进行数学计算以计算每个计数的排名,让它能够自动按比例缩放将是一个额外的好处。

最佳答案

您的管道实际上非常好。您真的只需要它即可缩放大量数字。我用一台我的网络服务器中未排序的ip编号文件替换了tail -1000 access_log | awk '{ print $1 }' |。添加了head -20以仅打印20个最活跃的IP地址。

$  sort ip.txt | uniq -c | sort -nr | \
> awk 'NR==1{scale=$1/50} \
> {printf("\n%-23s ",$0) ; \
> for (i = 0; i<($1/scale) ; i++) {
> printf("*")}; \
> }' | head -20

重要的部分是
  • NR==1{scale=$1/50}计算
    缩放系数以适合最大值
    数到50个字符,然后
  • printf("\n%-23s ",$0) ;使用
    宽度说明符%-23s左对齐
    23内的计数和IP地址
    字符空间。

  • 我的输出看起来像这样。我屏蔽了IP地址。
       824 xx.xxx.xx.39    **************************************************
    149 xx.xxx.xxx.176 **********
    138 xx.xxx.xxx.191 *********
    137 xx.xxx.xxx.41 *********
    105 xx.xxx.xxx.8 *******
    97 xx.xxx.xxx.21 ******
    96 xx.xxx.xx.220 ******
    91 xx.xx.xxx.198 ******
    87 xx.xxx.xxx.195 ******
    85 xx.xxx.xx.221 ******
    79 xxx.xxx.xxx.86 *****
    69 xx.xx.xx.12 *****
    68 xxx.xxx.xxx.159 *****
    65 xx.xxx.xxx.66 ****
    63 xx.xxx.xx.28 ****
    60 xx.xxx.xxx.104 ****
    59 xxx.xxx.xxx.242 ****
    59 xxx.xx.xxx.66 ****
    56 xx.xxx.xxx.202 ****

    这种输出具有人为因素的问题。人们通过线条(星号)的面积来判断这样的图形。由于此显示随数字的大小缩放,因此您无法直观地比较其中的两个图形。

    您的眼睛和大脑希望您判断线条的长度。 (我不确定我从哪里学到的。也许是从塔夫特的书中或从统计研究中获得的。)但是缩放可能意味着一个图形上的最长线代表800,而另一图形上的同一条线可能仅代表100。眼睛和大脑想要相信这两个大致相等,即使其中一个的大小是另一个的八倍,即使您可以看到原始数字也是如此。

    关于awk - 建立具有数量的IP分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797300/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com