2016-09-26 1 views
0

Ich finde, awk kann verwendet werden, um den Mittelwert der Spalte wie in here zu finden. Nehmen wir an, ich möchte den Durchschnitt der zweiten Spalte berechnen, aber nur Elemente zwischen bestimmten Zeilen (z. B. von Zeile 2 bis 6). Wie macht man das?Finden Mittelwert von Spaltendaten in bestimmten Intervall

+1

Read [fragen] und dann [Bearbeiten] Ihre Frage, die fehlenden Informationen zu liefern. –

+0

@EdMorton: Ich ging durch den Abschnitt "Wie man fragt". Aber ich sehe nicht genau, was die fehlenden Informationen sind. Irgendwelche spezifischen Zeiger? –

Antwort

1

Ich fand die Lösung. awk hat den Parameter FNR, der die Anzahl der Datensätze angibt, die normalerweise die Zeilennummer angeben. Mit diesem auf karakfa des solution:

awk 'FNR>=2 && FNR<=6 {sum+=$2; count++} 
    END {print (count?sum/count:"N/A")}' file 
0

Versuchen:

$ awk -v s=2 -v e=6 '{if(($2>=s)&&($2<=e)){sum+=$2;n++}}END{print (n!=0)?sum/n:0}' input.txt 

Erläuterung:

#!/bin/awk 

BEGIN { 
    start = 2 
    end = 6 
} 

{ 
    if(($2 >= start) && ($2 <= end)) 
    { 
     sum = sum + $2 
     n = n + 1 
    } 
} 

END { 
    print (n!= 0) ? sum/n : 0 
} 

#eof# 

Hoffe, es hilft!

+0

Um awk zu lernen, lese das Buch Effective Awk Programming, 4. Auflage, von Arnold Robbins. Awk ist nicht C. –

+1

'NR' wird nicht die Anzahl der aufgezeichneten Datensätze sein! Sie müssen die tatsächliche Anzahl für die Mittelwertberechnung verwenden. – karakfa

+0

@EdMorton: brainfuck-artige idiomatische, arght! – Lacobus

2
$ awk '$2>=2 && $2<=6 {sum+=$2; count++} 
        END {print (count?sum/count:"N/A")}' file 
+0

Dies funktioniert nicht für Daten im wissenschaftlichen Format. Zum Beispiel: + 5.68902179E + 00 –

+0

Alle Änderungen, die das wissenschaftliche Format enthalten? –

+0

Ich erkannte, dass meine Frage nicht klar genug war. Ich habe den Schnitt gemacht. Was ich meinte, ist der Zugriff auf Spalten zwischen bestimmten Zeilenintervallen und nicht auf Spalten zwischen bestimmten Werten. –

Verwandte Themen