如何使用awk统计CSV文件中每个国家对应的酒店数量?
awk统计所有国家酒店数量的实现方法
你现在使用的固定匹配某一国家的计数逻辑,调整为用关联数组存储计数即可实现全国家统计,不需要提前枚举所有国家名称:
可用命令
# 基础版:输出所有国家及对应酒店数 awk -F ',' 'NR>1 {count[$7]++} END {for (country in count) {print country, count[country]}}' /home/data/hotels.csv
注意这里加了
NR>1的判断,是为了跳过CSV的第一行表头,避免把表头的country字段计入统计结果,如果你手上的数据集没有表头,可以删掉这个判断条件。
参数说明
count[$7]++:awk支持关联数组,直接以第7列(国家列)的值作为数组的键,每读取到一行对应国家的记录,就给对应键的数值加1- END块遍历整个关联数组,逐行输出国家名称和对应的酒店数量
可选扩展:按酒店数量排序
如果需要按国家的酒店数量从高到低排序,在命令后加管道调用sort即可:
awk -F ',' 'NR>1 {count[$7]++} END {for (country in count) {print country, count[country]}}' /home/data/hotels.csv | sort -k2nr
注意事项
如果你的CSV文件中存在带引号包裹、内部含逗号的字段(比如带逗号的酒店名称),单纯按,分割的逻辑会出现字段错位。如果你之前统计单个国家的命令可以得到正确结果,说明你的数据集没有这类特殊格式,以上命令可以直接正常使用。
内容的提问来源于stack exchange,提问作者Vivern202
相关产品推荐
相关产品推荐

