Bash 从文件中绘制直方图

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中添加另一个。在缺

我正在做学校的项目,我不知道如何用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中添加另一个。在缺乏适当的样本数据时,使用如下数字:

$ 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-