
Ich versuche, eine HTML-Datei mit Bash nach einigen Werten zu durchsuchen. Ich habe also eine große Textdatei mit Zahlen wie diesen
3
2
4
2
Ich möchte zwei Zeilen erhalten, beide Zahlen multiplizieren und dann den Wert in einer Variablen speichern und ihn zu einer Gesamtsumme addieren. In diesem Fall wäre es 3*2=6
und 4*2=8
. Also X=0, X=X+6, X=X+8
dann X=14
.
Antwort1
Versuchen
xargs -n2 < file | while read x y; do ((X+=x*y)); echo $X; done
xargs -n2
: gruppiert Zahlen in Paarenread x y
: erste und zweite Zahl in Variablen speichernx
undy
((...))
ist nur eine arithmetische Auswertung in Bash
Sie werden auf dem Bildschirm sehen, wie die Summe wächst.
Antwort2
Sie können paste
und verwenden, bc
um zu tun, was Sie möchten:
$ paste -d"*" - - <file.txt | paste -d"+" - - | bc
14
Abbauen
Hier können wir sehen, dass immer paste
2 auf einmal genommen werden und ein Multiplikationszeichen dazwischen gesetzt wird.
$ paste -d"*" - - <file.txt
3*2
4*2
Ein ähnlicher Ansatz kann verwendet werden, um die Multiplikationszeichen einzubeziehen:
$ paste -d"*" - - <file.txt | paste -d"+"
3*2+4*2
Schließlich kann die fertige Zeichenfolge bc
zur Durchführung der mathematischen Operationen übergeben werden.
$ paste -d"*" - - <file.txt | paste -s -d'+' | bc
14
Die Verwendung von paste
in den obigen Befehlen variiert. Wenn wir die Zeilen zusammenführen, um X*Y zu bilden, sagen wir Paste, dass es 2 Zeilen nehmen soll (gekennzeichnet durch die Bindestriche: - -). Im zweiten Fall verwenden wir, paste
um die gesamte Zeichenfolge zu nehmen und +zwischen jedem Atom ein einzufügen.
Antwort3
Hier ist eine awk
Lösung (unter der Annahme einer geraden Anzahl von Zeilen):
awk '{y=$0; getline x; var += x*y};END{print var}' file.txt