Finden Sie das Maximum alle 10 Zeilen in einer bestimmten Spalte und drucken Sie die gesamte Zeile

Finden Sie das Maximum alle 10 Zeilen in einer bestimmten Spalte und drucken Sie die gesamte Zeile

Ich möchte den Maximalwert in Spalte Nr. 5 (Bestimmen) für jeweils 10 Zeilen ermitteln und dann die entsprechende gesamte Zeile ausdrucken. Beispielsweise beträgt in den ersten 10 Zeilen der Maximalwert in der 5. Spalte „1,1824“ und die entsprechende gesamte Zeile ist „10_M62 6: 3,0561 405,69 1,1824“. Ich möchte den Maximalwert in der 5. Spalte für jeweils 10 Zeilen ermitteln und dann die gesamte Spalte ausdrucken, wie oben gezeigt.

Ich habe den folgenden Befehl ausprobiert. Er funktioniert für die ersten 30 Zeilen, danach gibt er falsche Antworten aus. Ich bin nicht sicher, was mir entgeht. Bitte helfen Sie mir.

awk 'm<$10{m=$10;n=$5" "$2$3 $4" "$6" "$7" "$8" "$9} !((NR+2)%10){print $1,n,m;m=n=""}'

Bitte lassen Sie es mich wissen, wenn ich etwas unklar ausdrücke. Ich habe unten eine Beispielliste aufgeführt.

Name      No.           Value1   Value2   Determine
 
10_M62    1:            2.4578   504.44   0.0013  
10_M62    2:            2.6155   474.03   0.0010  
10_M62    3:            2.8581   433.80   0.0418  
10_M62    4:            2.9552   419.54   0.3863  
10_M62    5:            2.9809   415.93   0.1014  
10_M62    6:            3.0561   405.69   1.1824  
10_M62    7:            3.3083   374.77   0.0719  
10_M62    8:            3.5159   352.63   0.0242  
10_M62    9:            3.6366   340.94   0.0023  
10_M62   10:            3.6553   339.19   0.0049  
11_M63    1:            1.9677   630.10   0.0075  
11_M63    2:            2.3544   526.62   1.8099  
11_M63    3:            2.7363   453.12   0.0028  
11_M63    4:            2.7437   451.88   0.0044  
11_M63    5:            2.8913   428.81   0.0569  
11_M63    6:            2.9497   420.32   0.3310  
11_M63    7:            2.9688   417.63   0.0889  
11_M63    8:            3.0038   412.76   0.0330  
11_M63    9:            3.0792   402.65   0.2730  
11_M63   10:            3.0805   402.48   0.0914  
...

Antwort1

Dies funktioniert mit jedem awk in jeder Shell auf jeder UNIX-Box, selbst wenn Ihre Eingabewerte alle negativ sind und/oder Ihre Eingabe kein genaues Vielfaches von 10 Zeilen ist und unabhängig davon, wie viele Leerzeilen sich zwischen Ihrer Kopfzeile und Ihren Daten befinden:

$ cat tst.awk
NR==1 { print; next }
!NF { next }
(++numLines) % 10 == 1 {
    printf "%s", maxLine
    maxVal = $5
    maxLine = ""
}
$5 >= maxVal {
    maxVal = $5
    maxLine = $0 ORS
}
END { printf "%s", maxLine }

.

$ awk -f tst.awk file
Name      No.           Value1   Value2   Determine
10_M62    6:            3.0561   405.69   1.1824
11_M63    2:            2.3544   526.62   1.8099

verwandte Informationen