Bash 从文件中绘制直方图
我正在做学校的项目,我不知道如何用AWK画直方图 这就是我需要的: 变量1(8):Bash 从文件中绘制直方图,bash,awk,histogram,Bash,Awk,Histogram,我正在做学校的项目,我不知道如何用AWK画直方图 这就是我需要的: 变量1(8): 变量2(4):##### 变量3(2):## 变量4(2):## 变量5(2):## 变量6(1):# 变量7(1):# 变量8(1):# awk'{n[$1]+}END{for(i in n)print i,”(“n[i]”):}文件|排序-n 变量1(8): 变量2(4): 变量3(2): 变量4(2): 变量5(2): 变量6(1): 变量7(1): 变量8(1): 因此,我需要在awk中添加另一个。在缺
变量2(4):#####
变量3(2):##
变量4(2):##
变量5(2):##
变量6(1):#
变量7(1):#
变量8(1):#
awk'{n[$1]+}END{for(i in n)print i,”(“n[i]”):}文件|排序-n
变量1(8):变量2(4):
变量3(2):
变量4(2):
变量5(2):
变量6(1):
变量7(1):
变量8(1):
因此,我需要在awk中添加另一个。在缺乏适当的样本数据时,使用如下数字:
$ cat file
8
4
...
Awk:
输出:
8 ########
4 ####
2 ##
2 ##
2 ##
1 #
1 #
1 #
解释:
$ awk '{
h=sprintf("%0" $1 "d",0) # use 0s for the histogram chars
gsub(/0/,"#",h) # replace with #s
print $1,h # output
}' file
发布一些应该产生该输出的示例数据;gsub(//,“#”,bar)——唯一的优势是将宽度作为参数传递给sprintf,而不是动态构造格式字符串。
$ awk '{
h=sprintf("%0" $1 "d",0) # use 0s for the histogram chars
gsub(/0/,"#",h) # replace with #s
print $1,h # output
}' file
awk '
{ n[$1]++ }
END {
for (i in n) {
bar = sprintf("%*s",n[i],"")
gsub(/ /,"#",bar)
printf "%d\t%s (%d): %s\n", n[i], i, n[i], bar
}
}
' file | sort -rn | cut -f2-