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
awk
awk -F: '{if($2>10)print$2}' <filename
-F:
- définit le séparateur F
ield sur :
{if($2>10)print$2}
- pour chaque ligne, vérifiez si le champ 2
nd 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$ <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
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 ;-).