AWK脚本问题:CSV数据按均价分组存入数组后无法正常输出
问题分析与修正
核心问题点
- 均价计算时机错误:每一行都重新计算
avg,但此时sum尚未累加完所有有效价格,导致中间行用错误均价分类产品。 - 数组输出逻辑混乱:在每一行处理时都遍历打印数组,造成重复输出;且打印的是数组索引而非产品名称。
- printf格式符错误:
%.2应为%.2f,否则无法正确格式化浮点数。 - 表头处理不严谨:虽然分类时跳过了表头,但累加阶段未明确跳过,虽不影响结果但不符合规范。
修正后的高效代码(无需重复读文件)
BEGIN{ FS="," sum=0 count=0 } # 跳过表头,存储所有产品和价格,累加总价 NR > 1 { products[count] = $1 prices[count] = $2 sum += $2 count++ } END{ # 计算最终均价 avg = sum / count printf "Average Price: %.2f\n", avg # 按均价分类产品 high_idx=0 low_idx=0 for (i = 0; i < count; i++) { if (prices[i] > avg) { expensive[high_idx++] = products[i] } else if (prices[i] < avg) { cheap[low_idx++] = products[i] } } # 输出分类结果 print "\nExpensive Products:" for (i = 0; i < high_idx; i++) { print expensive[i] } print "\nCheap Products:" for (i = 0; i < low_idx; i++) { print cheap[i] } }
运行结果
针对你的输入文件,执行脚本后会输出:
Average Price: 37.86 Expensive Products: EG516 EG517 HG915 Cheap Products: EG412 EG411 LG210 LG180
内容的提问来源于stack exchange,提问作者Michael Debo
相关产品推荐
相关产品推荐

