Berechnen des Spaltendurchschnitts mit der Bash-Shell
Der Zweck dieses Tutorials besteht darin, zu zeigen, wie die Bash-Shell den Durchschnittswert einer einzelnen Spalte einer Textdatei auf einem Linux-System berechnen kann.
Lesen Sie unten, um den Code zu sehen, den Sie auf Ihrem eigenen System verwenden können, um einen Spaltendurchschnitt zu berechnen.
In diesem Tutorial lernen Sie:
- So berechnen Sie den Spaltendurchschnitt mit der Bash-Shell
Berechnen des Spaltendurchschnitts mit der Bash-Shell
Unsere Beispieldatei enthält die folgenden zwei Zeilen:
line1 4.5
line2 6
Der Durchschnitt dieser beiden Zahlen beträgt 5.25. Sehen wir uns an, wie wir diesen Durchschnitt mit Bash erreichen können. Unsere Lösung sollte skalierbar sein, damit sie auch dann funktioniert, wenn wir mehr Leitungen hätten.
-
Eine Möglichkeit, dies zu tun, besteht darin, die Kombination aus Bash
for-Schleifezusammen mit den Befehlencut,echoundbczu verwenden. Führen Sie den folgenden Code aus, vorausgesetzt, dasssich file.txtin Ihrem aktuellen Arbeitsverzeichnis befindet:count=0; total=0; for i in $( awk '{ print $2; }' file.txt );\ do total=$(echo $total+$i | bc ); \ ((count++)); done; echo "scale=2; $total / $count" | bc Und hier ist eine Shell-Skript-Version des obigen Befehls, damit wir genauer sehen können, was passiert:
#!/bin/bash count=0; total=0; for i in $( awk '{ print $2; }' file.txt ) do total=$(echo $total+$i | bc ) ((count++)) done echo "scale=2; $total / $count" | bcFür jede Zeile in
file.txtextrahieren wir eine zweite Spalte mit awk ($i). Dann verwenden wir die Befehleechoundbc, um alle Zahlen zu addieren$ieineGesamt$totalzu erhalten. Das Skript speichert auch eine Reihe von Schleifen in$count. In der letzten Zeile werden die Befehleechoundbcverwendet, um den Durchschnitt mit zwei Dezimalstellen zu berechnen.Hier ist eine weitere Methode zur Berechnung des Durchschnitts, indem Sie nur den Befehl
awkverwenden.awk '{ total += $2; count++ } END { print total/count }' file.txtHier ist eine weitere Methode, die auf
awk,paste,wcundbcbasiert. Dies funktioniert so, wie es ist, unabhängig davon, wie viele Zeilen Ihre Datei enthält.sum=$(awk '{print $2}' file.txt | paste -sd+ | bc); echo "$sum / $(cat file.txt | wc -l)" | bc -l
Abschließende Gedanken
In diesem Tutorial haben wir gelernt, wie man den Durchschnitt einer Spalte in Bash berechnet. Die Bash-Shell ist so flexibel und leistungsstark, dass sie uns fast immer die Möglichkeit bietet, Aufgaben wie die in diesem Tutorial behandelte zu erledigen. Wie üblich gibt es viele verschiedene Möglichkeiten, dieses Problem anzugehen, und eine Vielzahl verschiedener Tools, die für diese Aufgabe verwendet werden können. Wir haben hier einige der einfachsten behandelt. Vielleicht fällt Ihnen ein noch besserer Weg ein.
