2017-10-19 4 views
0

ich diese Daten habe hier:Wie ein Feld in der Spalte überspringen awk mit

Name,Team,First Test, Second Test, Third Test 
Tom,Red,5,17,22 
Joe,Green,3,14,22 
Maria,Blue,6,18,21 
Fred,Blue,2,15,23 
Carlos,Red,-1,15,24 
Phuong,Green,7,19,21 
Enrique,Green,3,16,20 
Nancy,Red,9,12,24 

Ich mag Feld in Zeile 6 3 ($ 3) überspringen, wenn ich den Durchschnitt des ersten Tests zu finden bin da Es ist ein Negativ.

Wie würde ich diesen bestimmten Wert überspringen und alle Felder noch in der ersten Spalte aufaddieren?

Ich weiß, dass der nächste Befehl über die ganze Zeile springt, gibt es einen Befehl, der ein bestimmtes Feld überspringt?

Vielen Dank.

BEARBEITEN

Entschuldigung. Hier ist, wie die Ausgabe aussehen soll, ich habe bereits die Durchschnitte von Test zwei und drei, brauche nur Hilfe mit dem Durchschnitt für Test eins.

Average for Test 1: 5 
Average for Test 2: 15.75 
Average for Test 3: 22.125 
--------------------------------- 
+0

Bitte immer erwarteter Ausgabe zu Ihrem Beitrag mit Code-Tags hinzufügen. – RavinderSingh13

+0

Ich entschuldige mich dafür, danke, dass du es mir gesagt hast. – jshakil

+0

@jshakil: Für die dritte Spalte allein, 'awk -v FS =", "'($ 3 + 0)> 0 {Summe + = $ 3; count ++} END {print (count! = 0)? (Summe/Anzahl): 0} 'Datei' – Inian

Antwort

1

awk zur Rettung!

$ awk -F, 'NR>1 {for(i=3;i<=NF;i++) if($i>=0) {s[i]+=$i; c[i]++}} 
      END {for(i=3;i<=NF;i++) print "Average for Test " (i-2) ": " s[i]/c[i]}' file 

Average for Test 1: 5 
Average for Test 2: 15.75 
Average for Test 3: 22.125 

übernimmt dort isat mindestens einen Datensatz mit nicht-negativem Wert, wenn nicht den Druck wachte mit c[i]>0

1

EDIT: Wie OP sagte er in Feldern negative Werte negieren muss so diese Lösung jetzt bereitstellt.

awk -F, 'FNR==1{print;next} {for(i=1;i<=NF;i++){printf("%s%s",$i<0?"":$i,i==NF?RS:",")}}' Input_file 

Die Ausgabe wird wie folgt sein.

Name,Team,First Test, Second Test, Third Test 
Tom,Red,5,17,22 
Joe,Green,3,14,22 
Maria,Blue,6,18,21 
Fred,Blue,2,15,23 
Carlos,Red,,15,24 
Phuong,Green,7,19,21 
Enrique,Green,3,16,20 
Nancy,Red,9,12,24 
+0

Ich brauche nicht den Durchschnitt der letzten drei Felder, ich brauche die ganze Spalte von Test 1, ich muss nur Überspringe den negativen Wert. – jshakil

+0

@jshakil, versuche meine bearbeitete Lösung jetzt und lass mich wissen, ob alles gut ist? – RavinderSingh13

+0

Vielen Dank für Ihre Hilfe, aber @karakfa hat es geschafft. Danke euch beiden. – jshakil

Verwandte Themen