Summieren Sie eine Liste von Zahlen in einer Textdatei mit Bash
Dieses Tutorial behandelt mehrere Methoden zum Summieren einer Liste von Zahlen in einer Datei mithilfe von Bash-Skripten. Die erste Methode beinhaltet die Verwendung des Befehls Einfügen
, und wir werden zwei Fälle besprechen: Verwenden einer vorhandenen Datei und Lesen einer Datei mit stdin
.
Zuletzt werden wir die Befehle cut
und awk
besprechen, um die Summen zu erhalten.
Summieren Sie eine Liste von Zahlen in einer Textdatei mit Bash
Die unten beschriebenen Methoden gehen davon aus, dass wir eine Eingabedatei mit dem Titel numbers.txt
haben.
numbers.txt
-Datei:
1
2
3
4
5
6
7
8
9
10
Verwenden Sie eine vorhandene Datei
Wenn wir alle Zahlen in einer einfachen Textdatei mit jeder Zahl in einer separaten Zeile gespeichert haben, können wir den folgenden Befehl in Bash aufrufen und die Summe erhalten.
Befehl:
paste -sd+ numbers.txt | bc
Ausgang:
55
Verwenden Sie stdin
(Standardeingabe)
Der folgende Befehl kann aus einer Datei lesen und die Summe der Zahlen erhalten.
Befehl:
cat numbers.txt | paste -sd+ | bc
Ausgang:
55
In diesem Fall lesen wir mit dem Befehl cat numbers.txt
aus der Datei. Dieser Befehl kann durch jeden anderen ersetzt werden, der eine Liste von Zahlen zurückgibt.
Es sollte beachtet werden, dass paste
zwar eine POSIX-definierte Spezifikation hat, aber nicht jede Implementierung gleich ist. Der folgende Befehl müsste in Mac OS verwendet werden, um die gleiche Ausgabe zu erzielen.
Befehl:
<cmd> | paste -sd+ - | bc
Verwenden Sie den Befehl Ausschneiden
Angenommen, wir haben eine Textdatei mit mehreren Spalten und möchten die Summe einer bestimmten Spalte erhalten. Dies erreichen wir mit dem Befehl cut
.
Angenommen, wir haben eine numbers.txt
-Datei, die wie folgt definiert ist:
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
Wir können jede der Spalten mit dem folgenden Befehl separat zusammenfassen.
Befehl:
cat numbers.txt | cut -d ' ' -f 2 | paste -sd+ | bc -l
Das Argument nach -f
repräsentiert die zu summierende Spaltennummer. Zu beachten ist auch, dass die Zählung der Spaltennummern in diesem Fall mit 1
beginnt, nicht mit 0
.
Da wir die 2
für das -f
-Flag hinzugefügt haben, erhalten wir die Summe der zweiten Spalte.
Ausgang:
10
Verwenden Sie den awk
-Befehl
Der nach seinen Autoren benannte Befehl awk
ist für diese Aufgabe besser geeignet als unsere bisherigen Methoden. Gemessen schneidet awk
deutlich besser ab als unsere bisherigen Methoden.
Befehl:
awk '{s+=$1} END {print s}' numbers.txt
Ausgang:
55
Sie können numbers.txt
durch den Namen der Datei ersetzen, die Ihre Zahlen enthält. Dies ermöglicht es uns auch, das Lesen der Datei durch cat
zu umgehen, was teilweise für die überlegene Leistung verantwortlich ist.