如何在Bash中打印CSV文件指定列中大于用户指定数值的数字
问题修复方案
修复后的可运行代码如下:
# 读取用户输入 read -p 'enter a number= ' num # 处理CSV文件输出符合要求的结果 awk -v threshold="$num" ' BEGIN { FS = "," matched = 0 } NR > 1 { if ($3 > threshold) { print $3 matched = 1 } } END { if (matched == 0) { print "no matches" } } ' class.csv
原代码错误点说明
read命令语法错误:定义变量时不需要加$前缀,加$会把当前num变量的取值作为新的变量名写入,无法正确保存用户输入- awk调用shell变量逻辑错误:awk无法直接读取shell环境的变量,需要用
-v参数提前将shell变量传入awk内部 - 字段分隔符设置错误:原代码将
FS=","写在主逻辑区,会导致第一行的分隔符识别失效,统一放在BEGIN块中初始化更规范 - 输出逻辑错误:原代码每行不匹配就输出一次
no matches,且没有跳过表头行,改成用matched变量统计匹配状态,所有行处理完后再判断是否需要输出无匹配提示,同时通过NR>1跳过表头行 - 冗余的管道操作:不需要用
cat读取文件再管道给awk,直接将文件名作为awk的参数即可,执行效率更高
内容的提问来源于stack exchange,提问作者Labh deep
相关产品推荐
相关产品推荐

