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]++:每读一行,就把第一列(也就是日期)作为数组的键,对应计数加1END块:等所有行都处理完后执行,遍历计数数组,把每个日期的首字母转成大写(匹配你要的输出格式),再输出日期和对应的次数
如果不需要首字母大写,简化版更清爽:
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
相关产品推荐
相关产品推荐

