web-dev-qa-db-fra.com

Comment extraire uniquement les valeurs supérieures à un seuil d'un fichier?

J'ai ce fichier:

names average
john:15.02
Mark:09.63
James:12.58

Je veux extraire uniquement les moyennes supérieures à 10, le résultat dans cet exemple devrait donc être:

15.02
12.58
7
Haikel Fazzani

Avec awk

awk -F: '{if($2>10)print$2}' <filename

Des explications

  • -F: - définit le séparateur Field sur :
  • {if($2>10)print$2} - pour chaque ligne, vérifiez si le champ 2nd est >10, le cas échéant print it
  • <filename - laissez le shell ouvrir le fichier filename, c'est mieux que laisser awk le faire, voir réponse de Stéphane Chazelas à ce sujet

Exemple d'exécution

$ <filename awk -F: '{if($2>10)print$2}'
15.02
12.58

Il est également possible d'ajouter des espaces et de mettre le motif en dehors des crochets, ils sont donc égaux - grâce à Stefan pour l'avoir signalé:

awk -F: '{if($2>10)print$2}' <filename
awk -F: '{ if ( $2 > 10 ) print $2 }' <filename
awk -F: '$2>10{print$2}' <filename
awk -F: '$2 > 10 { print $2 }' <filename
14
dessert

Avec grep, vous devez travailler avec des expressions régulières. par exemple.

grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2

comme avec sed:

sed -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)/\1/p' file

Mais utiliser RegEx sur des données commandées est sujet aux erreurs (d'après mon expérience) et difficile à lire ;-).

3
Stefan