Summe von Zahlen in einer Zeilen bilden

X

xalo

Grünschnabel
Auf ein Neues...
Ich komme bei folgender Problematik nicht weiter:
Ich habe eine Datei (zahlen.txt), die ich einlese mit folgenden Daten:
111 222 333
111 222 333 444
111 222

Über diese Zahlen möchte ich gerne zeilenweise eine Summe bilden, also 111+222+333=666 usw.
Hierzu habe ich ein Skript gefunden, dass allerdings mit "seq" arbeitet, welches bei mir nicht installiert ist...

#!/bin/bash
while read line; do
a=($line)
letztes=$((${#a[*]}-1))
sum=${a[0]}
echo -n "$sum "
for i in $(seq 1 $letztes); do
sum=$((sum+${a[$i]}))
echo -n "+ ${a[$i]} "
done
echo "= $sum"
done < zahlen.txt

Meldung: "line 7: seq: command not found"

Wie kann ich "seq" ersetzen, damit das Skript läuft bzw. gibt es eine bessere Lösung für mein Problem?

Danke im voraus für Antworten.
 
Code:
eval echo {1..${#a[@]}}

...oder effizienter so:

Code:
for((i=0;$i<${#a[@]};i++)) ; do
...
done
 
hm, das komplette Array-Geraffel kann man sich doch sparen - " " ist ein wunderbarer Trenner, mit dem die Shell sehr gut klar kommt und dann könnte man doch einfach mit for oder while über die Elemente der Zeile gehen und die direkt addieren ohne da erst Anzahlen und so ermitteln zu müssen...
Code:
while read line
  do
    for i in ${line}
    do
      echo ${i}
    done
    echo ------
  done < ${datei}
... dann halt statt echo noch ein wenig Mathe und fertig ist die Laube. Ach ja - Summe noch an passender Stelle zurücksetzen nicht vergessen.
 
Code:
eval echo {1..${#a[@]}}

...oder effizienter so:

Code:
for((i=0;$i<${#a[@]};i++)) ; do
...
done

Also in dieser Form, richtig?:
#!/bin/bash
while read line; do
a=($line)
letztes=$((${#a[*]}-1))
sum=${a[0]}
echo -n "$sum "
for((i=0;$i<${#a[@]};i++)) ; do
sum=$((sum+${a[$i]}))
echo -n "+ ${a[$i]} "
done
echo "= $sum"
done < zahlen.txt
 
Danke für Eure Antworten... das Problem hier (für mich) ist, dass nicht jede Zeile die gleiche Anzahl an Argumenten (Zahlen) enthält und ich somit die Anzahl ermitteln muss...
 
nein, musst Du nicht. Schau Dir mein Beispiel an.

Btw - Wenn Du Deinen Code auch in code-Tags postest dann steigt die Lesbarkeit enorm...


edit: Drecks-BB-Code.
 
Zuletzt bearbeitet:
Gibt es eigentlich einen awk-Befehl, ähnlich wie bei Spalten, um die Zeile zu summieren?
 
Ich hätte noch einen:
Code:
line=(1 2 3 4)
IFS=+ sum=$((${line[*]}))
 
Oder eine Kurzform der for-Schleife, die mit den Argumenten $1 ... $# arbeitet. sum wird automatisch mit 0 initialisiert:
Code:
for v ;do ((sum=$sum+$v));done
 
bei mir sähe es so aus :D
Code:
 while read i ; do expr `echo $i | sed 's/ / + /g'` ; done < zahlen.txt
... oder fehlt etwa sed auch?
 

Ähnliche Themen

Verschlüsseltes Backup-Script mit rsync

Bestimmte Zeilen einer Spalte addieren

Bash Skript: [[: not found Fehler

Last mit etc/passwd anzeigen lassen

Zeilen löschen und ersetzen mit sed

Zurück
Oben