Summe von Zahlen in einer Zeilen bilden

Diskutiere Summe von Zahlen in einer Zeilen bilden im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Auf ein Neues... Ich komme bei folgender Problematik nicht weiter: Ich habe eine Datei (zahlen.txt), die ich einlese mit folgenden Daten: 111 222...

  1. xalo

    xalo Grünschnabel

    Dabei seit:
    16.06.2010
    Beiträge:
    9
    Zustimmungen:
    0
    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.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 hellfire, 19.12.2016
    hellfire

    hellfire Foren As

    Dabei seit:
    25.05.2016
    Beiträge:
    76
    Zustimmungen:
    10
    Code:
    eval echo {1..${#a[@]}}
    ...oder effizienter so:

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

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.105
    Zustimmungen:
    9
    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.
     
  5. xalo

    xalo Grünschnabel

    Dabei seit:
    16.06.2010
    Beiträge:
    9
    Zustimmungen:
    0
    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
     
  6. xalo

    xalo Grünschnabel

    Dabei seit:
    16.06.2010
    Beiträge:
    9
    Zustimmungen:
    0
    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...
     
  7. #6 marce, 19.12.2016
    Zuletzt bearbeitet: 19.12.2016
    marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.105
    Zustimmungen:
    9
    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.
     
  8. xalo

    xalo Grünschnabel

    Dabei seit:
    16.06.2010
    Beiträge:
    9
    Zustimmungen:
    0
    Gibt es eigentlich einen awk-Befehl, ähnlich wie bei Spalten, um die Zeile zu summieren?
     
  9. #8 hellfire, 19.12.2016
    hellfire

    hellfire Foren As

    Dabei seit:
    25.05.2016
    Beiträge:
    76
    Zustimmungen:
    10
    Ich hätte noch einen:
    Code:
    line=(1 2 3 4)
    IFS=+ sum=$((${line[*]}))
     
  10. #9 Spröde, 23.12.2016
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    175
    Zustimmungen:
    0
    Code:
    line="1 2 3 4"
    sum=$((${line// /+}))
    :D
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 hellfire, 23.12.2016
    hellfire

    hellfire Foren As

    Dabei seit:
    25.05.2016
    Beiträge:
    76
    Zustimmungen:
    10
    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
     
  13. #11 Programmer78, 27.12.2016
    Programmer78

    Programmer78 Doppel-As

    Dabei seit:
    28.11.2007
    Beiträge:
    102
    Zustimmungen:
    1
    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?
     
Thema:

Summe von Zahlen in einer Zeilen bilden

Die Seite wird geladen...

Summe von Zahlen in einer Zeilen bilden - Ähnliche Themen

  1. Debian-Projekte zum Google Summer of Code 2016

    Debian-Projekte zum Google Summer of Code 2016: In insgesamt zehn Projekten schickt Debian 25 Teilnehmer zum GSoC 2016, vier weitere arbeiten im Rahmen des Outreachy-Programms. Die Projekte...
  2. Google kündigt Summer of Code 2016 an

    Google kündigt Summer of Code 2016 an: Der Suchmaschinenbetreiber Google geht dieses Jahr mit seinem Summer of Code in die mittlerweile elfte Runde. Auch dieses Jahr sind wieder...
  3. »Tor Summer of Privacy« angekündigt

    »Tor Summer of Privacy« angekündigt: Nachdem das Tor-Projekt in diesem Jahr nicht in den Kreis der von Google gesponsorten GSoC-Projekte aufgenommen wurde, startet die Organisation...
  4. Projekte für Googles Summer of Code 2015 vorgestellt

    Projekte für Googles Summer of Code 2015 vorgestellt: Der Suchmaschinenbetreiber Google hat die Namen der Organisationen bekannt gegeben, die im Rahmen des Google Summer of Code (GSoC) 2015 gefördert...
  5. Studenten für den Google Summer of Code 2014 benannt

    Studenten für den Google Summer of Code 2014 benannt: Für die bereits zehnte Auflage des Google Summer of Code (GSoC) wurden jetzt 1307 Studenten ausgewählt. Insgesamt gab es in diesem Jahr 6.313...