如何编写Shell脚本筛选CSV文件特定范围外数值并统计
修正后的Shell脚本实现方案
以下是满足需求的Shell脚本:
#!/bin/bash # 初始化统计变量 total_records=0 abnormal_records=0 # 跳过表头,逐行读取数据 while IFS="," read -r time temp do # 统计总记录数 ((total_records++)) # 判断温度是否不在30-35范围内(数值比较) if (( temp < 30 || temp > 35 )); then echo "Time : $time Temp : $temp" ((abnormal_records++)) fi done < <(tail -n +2 parse22.csv) # 输出统计结果 echo "------------------------" echo "总记录数(排除表头): $total_records" echo "异常记录数: $abnormal_records"
关键修正说明
- 变量引用修正:原脚本错误使用未定义的
${Temp}变量,改为直接读取CSV第二列的temp变量 - 数值比较逻辑修正:原脚本用
>作为比较符(在[ ]中这是重定向符号,并非数值大于),改用(( ))进行算术比较,同时补充温度小于30的异常判断 - 统计功能添加:初始化
total_records和abnormal_records变量,每次循环累加总记录数,触发异常条件时累加异常记录数,循环结束后输出统计结果 - 可读性优化:将
column1、column2改为语义化的time、temp变量名,提升脚本可读性
内容的提问来源于stack exchange,提问作者Ram Prasad
相关产品推荐
相关产品推荐

