it-swarm.com.de

Wie extrahiere ich aus einer Datei nur Werte, die größer als ein Schwellenwert sind?

Ich habe diese Datei:

names average
john:15.02
Mark:09.63
James:12.58

Ich möchte nur die Mittelwerte größer als 10 daraus extrahieren, daher sollte die Ausgabe in diesem Beispiel folgendermaßen aussehen:

15.02
12.58
9
Haikel Fazzani

Mit awk

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

Erklärungen

  • -F: - setzt das Trennzeichen Field auf :
  • {if($2>10)print$2} - Testen Sie für jede Zeile, ob das Feld 2nd >10 ist, wenn ja, print
  • <filename - Lass die Shell die Datei filename öffnen, das ist besser, als awk das zu lassen, siehe Stéphane Chazelas 'Antwort zum Thema

Beispiellauf

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

Es ist auch möglich, Leerzeichen hinzuzufügen und das Muster außerhalb der eckigen Klammern zu platzieren. Diese sind also gleich - danke an Stefan für diesen Hinweis:

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
16
dessert

Mit grep müssten Sie mit regulären Ausdrücken arbeiten. z.B.

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

wie bei sed:

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

Aber die Verwendung von RegEx für bestellte Daten ist meiner Erfahrung nach fehleranfällig und schwer zu lesen ;-).

3
Stefan