Ich habe eine Datei mit 5 Spalten im folgende Format:Finding Summe basierend auf mehreren Spalten aus einer Datei und zeigt den höchsten Wert und die entsprechende Zeile awk mit
$cat test.txt
id;section;name;val1;val2
11;10;John;50;15
12;20;Sam;40;20
13;30;Jeny;30;30
14;10;Ted;60;10
15;10;Mary;30;5
16;20;Tim;15;15
17;30;Pen;20;100
ich die Daten in dem verarbeitenden Datei basierend auf der section_number (Spalte 2) übergeben. Und ich möchte die ID, Name, Total (Spalte4 + Spalte5) für die Section_id übergeben. Am Ende möchte ich die Zeileninformation drucken, die die höchste Summe hat.
Ich habe bereits ein awk Befehl wie folgt:
section=10 ; awk -F";" -v var="$section" 'BEGIN { print "id Name Total" } { if ($2 == var) { sum = $4 + $5 ;print $1 " "$3 " " sum ;if (sum>newsum) {newsum=sum;name=$3;id=$1}}} END { print "Max sum for section "var" is "newsum " for Name: " name " and ID: " id }' test.txt;
und es ist die Anzeige von Daten wie folgt:
id Name Total
11 John 65
14 Ted 70
15 Mary 35
Max sum for section 10 is 70 for Name: Ted and ID: 14
Aber wie das Szenario zu behandeln, wenn es mehrere Datensätze mit den sind derselbe höchste Wert wie Total?
Es hängt alles davon ab, wie Sie behandeln möchten es ich denke? Man könnte sagen, dass der erste Precedens '>', der letzte '> =' oder beide durch Verwendung von Arrays erhält. – andlrc
Es kann eine beliebige Anzahl von Zeilen für jeden Abschnitt mit demselben Gesamtwert geben. Also, wie alle diejenigen zu verfolgen, um am Ende zu drucken? Zum Verfolgen eines Gesamtwertes habe ich wie oben getan. Aber für mehrere gleiche Werte bin ich nicht so vertraut mit awk und Arrays. –
Für die Eingabe "ID; Abschnitt; Name; Val1; Val2 11; 10; John; 50; 15 12; 20; Sam; 40; 20 13; 30; Jeny; 30; 30 14; 10; Ted ; 60; 10 15; 10; Mary; 30; 5 16; 20; Tim; 15; 15 17; 30; Kugelschreiber; 20; 100 18; 10; Mat; 25; 45' Ich bekomme einen falschen Ausgang 'ID Name Gesamt 11 John 65 14 Ted 70 15 Mary 35 18 Mat 70 Max Summe für Sektion 10 ist 70 für Name: Ted und ID: 14'. Für korrekte es muss die ID drucken: 18 auch in der Zusammenfassung –