如何使用bash从排序后的汽车数值文件中移除MPG值为0的条目
解决方案
你原来的代码存在两处逻辑错误,导致过滤MPG为0的条目不生效:
- 排序后直接把结果重定向写入
cconsum文件,后续管道的grep命令拿不到输入内容,同时两次写入同一个文件会导致内容损坏 grep -v "^0$"的匹配规则是过滤整行仅为0的内容,不符合你要过滤第二列(MPG字段)为0的需求
你只需要把脚本开头生成cconsum的那行代码替换为下面的内容即可:
tail +3 cars.csv | sort -n -k2 -t';' | awk -F ';' '$2 != 0' > cconsum
命令说明
awk -F ';' '$2 != 0':指定分号为字段分隔符,仅保留第二列(MPG字段)数值不等于0的行,精准过滤掉所有MPG为0的条目- 调整了管道和重定向的逻辑,确保排序后的内容先经过过滤再写入
cconsum文件,不会出现内容丢失或损坏的问题
完整修正后的脚本参考
#!/bin/bash tail +3 cars.csv | sort -n -k2 -t';' | awk -F ';' '$2 != 0' > cconsum nlinies=`wc -l < cconsum` i=1 while [ $i -le $nlinies ] do head -$i cconsum | tail -1 > linia echo "Cotxe: `cut -d';' -f1 linia`" echo "MPG: `cut -d';' -f2 linia` NºCilindres: `cut -d';' -f3 linia` Cilindrada: `cut -d';' -f4 linia`" echo "Pòtencia: `cut -d';' -f5 linia` Pes: `cut -d';' -f6 linia` Acceleració: `cut -d';' -f7 linia`" echo "Model de l'any: `cut -d';' -f8 linia` Origen: `cut -d';' -f9 linia`" echo " " i=$((i+1)) done rm cconsum 2> /dev/null rm linia 2>/dev/null
内容的提问来源于stack exchange,提问作者Ruth Mary Thannikuzhuppil
相关产品推荐
相关产品推荐

