Meine Datei ist wie folgt; ich möchte die Datensätze der Studenten anzeigen, deren Prozentsatz über 80 liegt.
Studid StudName Asp.Net DBMS Unix
1 Ani 75 62 80
2 George 90 95 82
3 Jake 45 30 40
4 Dennie 89 92 90
also habe ich folgenden Code verwendet:
awk '(($3+$4+$5)/3)>80 {print}' stud
Es funktioniert, aber ich möchte diese Spalten einer Variable zuweisen und dann die Ausgabe anzeigen. Also habe ich den folgenden Code ausprobiert, aber er hat nicht funktioniert
awk 'total=$3+$4+$5, per=total/3, per>80 {print}' stud
Irgendeine Lösung mit Variablen?
Antwort1
Sie können die Logik aus demRegelAbschnitt in eineAktion
awk '{total=$3+$4+$5; per=total/3; if (per>80) print}' stud
2 George 90 95 82
4 Dennie 89 92 90
Beachten Sie, dass hiermit versucht wird, die Spaltenüberschriften arithmetisch auszuwerten - was "funktioniert" awk
, weil in nicht numerische Felder als Null behandelt werden, wenn Sie versuchen, mit ihnen Arithmetik durchzuführen -, aber dazu führen würde, dass die Überschriftenzeile gedruckt wird, wenn Sie beispielsweise den Test in ändern . Besser wäre es meiner Meinung nach, entweder die Überschriftenzeile explizit zu überspringen, indem Sie eine Aktion für die Regel per<80
verwendennext
NR==1
awk 'NR==1 {next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
2 George 90 95 82
4 Dennie 89 92 90
oder, wenn Sie die Kopfzeile wünschen, drucken Sie sie explizit aus
awk 'NR==1 {print; next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
Studid StudName Asp.Net DBMS Unix
2 George 90 95 82
4 Dennie 89 92 90
Antwort2
Versuchen:
awk '
# if /^Studid/ is matched move to the next record (row) of the input text
/^Studid/ { next }
{
total=$3+$4+$5
per=total/3
if (per > 80)
print
}' stud
Ausgabe
2 George 90 95 82
4 Dennie 89 92 90