Summieren Sie eine Liste von Zahlen in einer Textdatei mit Bash

Faaiq Bilal 20 Juni 2023
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.

Verwandter Artikel - Bash Math