Erhalten Sie Paare von Linien und multiplizieren Sie

Erhalten Sie Paare von Linien und multiplizieren Sie

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=6und 4*2=8. Also X=0, X=X+6, X=X+8dann X=14.

Antwort1

Versuchen

xargs -n2 < file | while read x y; do ((X+=x*y)); echo $X; done
  • xargs -n2: gruppiert Zahlen in Paaren
  • read x y: erste und zweite Zahl in Variablen speichern xundy
  • ((...))ist nur eine arithmetische Auswertung in Bash

Sie werden auf dem Bildschirm sehen, wie die Summe wächst.

Antwort2

Sie können pasteund verwenden, bcum zu tun, was Sie möchten:

$ paste -d"*" - - <file.txt | paste -d"+" - - | bc
14

Abbauen

Hier können wir sehen, dass immer paste2 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 bczur Durchführung der mathematischen Operationen übergeben werden.

$ paste -d"*" - - <file.txt | paste -s -d'+' | bc
14

Die Verwendung von pastein 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, pasteum die gesamte Zeichenfolge zu nehmen und +zwischen jedem Atom ein einzufügen.

Antwort3

Hier ist eine awkLösung (unter der Annahme einer geraden Anzahl von Zeilen):

 awk '{y=$0; getline x; var += x*y};END{print var}' file.txt

verwandte Informationen