awk: minimum und maximum finden in der Spalte

Ich bin mit awk, um mit einer einfachen .dat-Datei enthält mehrere Zeilen von Daten und jede Zeile hat 4 Spalten, getrennt durch ein einzelnes Leerzeichen.
Ich möchte zu finden, das minimum und das maximum der ersten Spalte.

Die Daten-Datei sieht wie folgt aus:

9 30 8.58939 167.759
9 38 1.3709 164.318
10 30 6.69505 169.529
10 31 7.05698 169.425
11 30 6.03872 169.095
11 31 5.5398 167.902
12 30 3.66257 168.689
12 31 9.6747 167.049
4 30 10.7602 169.611
4 31 8.25869 169.637
5 30 7.08504 170.212
5 31 11.5508 168.409
6 31 5.57599 168.903
6 32 6.37579 168.283
7 30 11.8416 168.538
7 31 -2.70843 167.116
8 30 47.1137 126.085
8 31 4.73017 169.496

Die Befehle, die ich benutzt habe sind wie folgt.

min=`awk 'BEGIN{a=1000}{if ($1<a) a=$1 fi} END{print a}' mydata.dat`
max=`awk 'BEGIN{a=   0}{if ($1>a) a=$1 fi} END{print a}' mydata.dat`

Jedoch, der Ausgang ist min=10 und max=9.

(Ähnliche Befehle zurückgeben kann mich den rechten minimum und das maximum der zweiten Spalte.)

Könnte mir jemand sagen, wo ich falsch war? Danke!

Die Werte werden als strings interpretiert, so sind die Ergebnisse der min/max in lexikographischer Reihenfolge.
Ich sehe, ich muss den cast von string in int in awk. Danke!!!

InformationsquelleAutor Wang Zong'an | 2015-04-21

Schreibe einen Kommentar