You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Unix命令生成重复行的百分比统计直方图?

统计Redfish版本占比的Unix命令方案

需求说明

我有一个名为bmc-versions.txt的文件,内容如下:

"RedfishVersion":"1.6.0"
"RedfishVersion":"1.6.0"
"RedfishVersion":"1.6.0"
"RedfishVersion":"1.6.0"
"RedfishVersion":"1.6.0"
"RedfishVersion":"1.6.0"
"RedfishVersion":"1.15.0"
"RedfishVersion":"1.15.0"
"RedfishVersion":"1.15.0"
"RedfishVersion":"1.15.0"
"RedfishVersion":"1.15.0"
"RedfishVersion":"1.15.0"
"RedfishVersion":"1.15.0"

需要用Unix命令统计各版本的占比百分比,输出格式要求提取版本号并显示对应占比,示例期望输出:

"1.0.0"  50%
"1.0.2"  40%

目前已尝试的命令:

sort bmc-versions.txt | uniq -cd

该命令能输出各版本的重复次数,但无法直接得到占比。

解决方案

基础占比统计命令

使用以下命令可以直接生成你需要的格式输出:

total=$(wc -l < bmc-versions.txt); sort bmc-versions.txt | uniq -cd | awk -v total="$total" '{percent=sprintf("%.0f%%", ($1/total)*100); gsub(/.*:"([^"]+)"/, "\"\\1\"", $2); print $2, "  " percent}'

命令解释:

  1. total=$(wc -l < bmc-versions.txt):计算文件总行数并存入变量total
  2. sort bmc-versions.txt | uniq -cd:对内容排序后,统计每个重复行的出现次数
  3. awk处理逻辑:
    • 接收总行数变量,计算当前版本的占比并格式化为整数百分比
    • 用gsub提取行中的版本号(从"RedfishVersion":"x.x.x"中提取"x.x.x")
    • 按指定格式输出版本号和占比

带直方图的增强版输出

如果需要可视化的直方图结果,可以使用以下命令:

total=$(wc -l < bmc-versions.txt); sort bmc-versions.txt | uniq -cd | awk -v total="$total" '{percent=($1/total)*100; bar_length=int(percent/2); gsub(/.*:"([^"]+)"/, "\"\\1\"", $2); printf "%-12s %3.0f%% ", $2, percent; for(i=0;i<bar_length;i++) printf "*"; print ""}'

针对测试文件的示例输出:

"1.6.0"       46% **********************
"1.15.0"      54% ***************************

内容的提问来源于stack exchange,提问作者Node.JS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:26:18