在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 **************************************
Run Code Online (Sandbox Code Playgroud)
希望它看起来像:
value ------------- Distribution ------------- count
192.168.0.1 @@@@@@@@@ 43
192.168.0.2 @@@@@@@@ 38
Run Code Online (Sandbox Code Playgroud)
@s是一个较小的计数摘要,而不是数字的*.让它自动按比例缩放将是一个额外的好处,因为我必须做数学来弄清楚如何对每个计数进行排名.
编辑
我读过这个问题,这应该是(this one)的副本。我不同意。在那个问题中,目的是获得列中各个数字的频率。但是,如果我将该解决方案应用于我的问题,我仍然会遇到将特定范围内数字的频率分组到最终直方图的初始问题。即,如果该解决方案告诉我0.45is2和0.44is的频率1(对于我的输入数据),我仍然面临将这两个频率分组3为范围的总和的问题0.4-0.5。
结束编辑
题-
我有一长列数据,其值介于 0 和 1 之间。这将是以下类型 -
0.34
0.45
0.44
0.12
0.45
0.98
.
.
.
Run Code Online (Sandbox Code Playgroud)
允许重复的一长列十进制值。
我正在尝试将其更改为直方图类型的输出,例如(对于上面显示的输入)-
0.0-0.1 0
0.1-0.2 1
0.2-0.3 0
0.3-0.4 1
0.4-0.5 3
0.5-0.6 0
0.6-0.7 0
0.7-0.8 0
0.8-0.9 0
0.9-1.0 1
Run Code Online (Sandbox Code Playgroud)
基本上,第一列具有每个范围的下限和上限,第二列具有该范围内的条目数。
我把它(糟糕地)写成——
for i in $(seq 0 0.1 0.9)
do
awk -v var=$i '{if ($1 > var && $1 < var+0.1 ) print $1}' …Run Code Online (Sandbox Code Playgroud)