Home > OS >  Eliminating 0s from a sorted numeric file with bash
Eliminating 0s from a sorted numeric file with bash

Time:11-18

Cotxe: Saab 900s

MPG:0 NºCilindres: 4 Cilindrada: 121.0

Pòtencia: 110.0 Pes: 2800. Acceleració: 15.4

Model de l'any: 81 Origen: Europe

Cotxe: Volkswagen Super Beetle 117

MPG: 0 NºCilindres: 4 Cilindrada: 97.00

Pòtencia: 48.00 Pes: 1978. Acceleració: 20.0

Model de l'any: 71 Origen: Europe

Cotxe: Hi 1200D

MPG: 9.0 NºCilindres: 8 Cilindrada: 304.0

Pòtencia: 193.0 Pes: 4732. Acceleració: 18.5

Model de l'any: 70 Origen: US

Cotxe: Chevy C20

MPG: 10.0 NºCilindres: 8 Cilindrada: 307.0

Pòtencia: 200.0 Pes: 4376. Acceleració: 15.0

Model de l'any: 70 Origen: US

Cotxe: Ford F250

MPG: 10.0 NºCilindres: 8 Cilindrada: 360.0

Pòtencia: 215.0 Pes: 4615. Acceleració: 14.0

Model de l'any: 70 Origen: US

Cotxe: Chevrolet Impala

MPG: 11.0 NºCilindres: 8 Cilindrada: 400.0

Pòtencia: 150.0 Pes: 4997. Acceleració: 14.0

Model de l'any: 73 Origen: US

This is the output from my code. I sorted this file and I want to eliminate/ hide the zeros that appear in MPG. Which command line should I use so that they won't appear in the output?

This is the code that I've done so far for this output:

#!/bin/bash { tail 3 cars.csv | sort -n -k2 -t';' > cconsum | grep -v "^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

}

CodePudding user response:

Grep is your friend here:

tail  3 cars.csv | sort -n -k2 -t ';' | grep -v "^0$"
  • grep
  • -v excludes following pattern
  • ^0$ ... ^ = starts with, 0 = 0, $ = the end of the line. Basically a line that only has 0 in it.

CodePudding user response:

Does it have to be written as a pure Bash script? You can do it using sed easily:

sed 's/\(MPG: [0-9][0-9]*\)\.0/\1/' your-filename

This substitutes Group 1 inside the parentheses followed by ".0", with Group 1 without the ".0".

  •  Tags:  
  • bash
  • Related