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

Bash脚本:不使用awk统计CSV文件某列的出现次数

如何用Bash统计CSV文件某列值的出现次数

嘿,刚看到你在学Bash脚本,想统计CSV第一列日期的出现次数对吧?刚好我之前处理过类似需求,给你几个实用的方案,直接就能套用:

先把你的示例CSV内容贴出来,方便对照:

DAYS,SOMEVALUE,SOMEVALUE
sunday,something,something
monday,something,something
wednesday,something,something
sunday,something,something
monday,something,something

方案1:用awk快速实现(推荐)

awk是处理文本列的神器,一行命令就能搞定,还能直接调整输出格式:

awk -F ',' '{count[$1]++} END {for (day in count) {print toupper(substr(day,1,1)) substr(day,2) " : " count[day]}}' your_file.csv

给你拆解下这段命令:

  • -F ',':告诉awk用逗号作为CSV的分隔符
  • count[$1]++:每读一行,就把第一列(也就是日期)作为数组的键,对应计数加1
  • END块:等所有行都处理完后执行,遍历计数数组,把每个日期的首字母转成大写(匹配你要的输出格式),再输出日期和对应的次数

如果不需要首字母大写,简化版更清爽:

awk -F ',' '{count[$1]++} END {for (day in count) print day " : " count[day]}' your_file.csv

方案2:用基础命令组合实现

要是你更熟悉cut、sort这类基础工具,也可以用它们组合完成:

cut -d ',' -f 1 your_file.csv | sort | uniq -c | awk '{print toupper(substr($2,1,1)) substr($2,2) " : " $1}'

步骤拆解:

  • cut -d ',' -f 1:提取CSV的第一列内容
  • sort:把相同日期排在一起,方便后续统计
  • uniq -c:统计每个日期的出现次数(输出时数字在前,日期在后)
  • 最后用awk调整格式,把日期首字母大写,调换数字和日期的位置,得到你要的输出样式

用你的示例CSV测试的话,两种方案都会输出:

Sunday : 2
Monday : 2
Wednesday : 1

内容的提问来源于stack exchange,提问作者mark Franz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:47:09