zeilen einer textdatei zusammen addieren

vaskadeluxe

vaskadeluxe

Grünschnabel
Hallo,

ich habe folgendes Problem. Ich würde gerne aus einer textdatei alle Zeilen zusammen addieren zu einem Ergebnis.

Beispiel: text.txt
1
2
3
4

Ich brauche ein Kommando, was mir 1+2+3+4 zusammen rechnet.

Kann mir jemand helfen.
 
Versuchmal sowas:
Code:
cat text.txt | { while read zahl
do
x=$(($x+$zahl))
done
echo $x
}
Gruss
d22
//edit: vorrausgesetzt du benutz die 'bash' als Shell...
 
n*(n+1)/2 das hat auch schon der olle gauß gewußt
 
Code:
awk '{sum+=$1}END{print sum}' foo.txt

Code:
perl -le '$sum+=$_ for <> ; print $sum;' foo.txt
 
Zuletzt bearbeitet:
andere möglichkeit. das sollte schneller gehen. einlesen der datei und heruasfinden wieviel zeilen den text hat. Ein bisschen Kreativität ist hier schon gefragt. Dann kannst du dass Script villeicht so schreiben:


Code:
#!/bin/bash
N:=$(wc -l <Datei>)
SUM=$(($N*($N+1)/2))
echo $SUM
exit 0

möglicherweise hapert es aber noch bei einigen kleinigkeiten, die dir nochmal anschauen musst.

das meinte ich, als ich dir den hinweis oben gegeben habe.
 
Zuletzt bearbeitet:
Hallo,

meine txt Datei sieht aber so aus:

-7.41
17.28

also Gleitkomma und ich habe mir folgendes angepasst :) ich muss noch sagen dass ich Zeilen zähle um Durchschnitt zu bilden und die Lösung nicht gerade eleganteste ist, aber ich kriege Runtime error (func=(main), adr=9): Divide by zero

-7.00
5.00

wenn ich den Code in eine script-Datei einfüge, wobei markiert und in die console eingefügt läuft der.




also hier ist der Code
Code:
y=0;
n=0;
n=$(wc -l ausgabe3 | cut -d' ' -f1);
for x in `cat ausgabe3 | cut -d. -f1`;
do
y=$((y+$x));
done
m=`echo "scale=2 ; $y/$n" | bc`;
echo $m;

was mache ich den falsch? und was könnte man eleganter machen ?

Danke
 
Code:
~> cat Test.txt
-7.41
17.28

Code:
#!/bin/bash
l=0
while read float; do
  [ $l = 0 ] && op="$float" || op="${op}+$float"
  ((l++))
done <Test.txt
echo "scale=2;(${op})/$l" | bc
 
bash kann nur Ganzzahlarithmetik, keine floating points - deswegen musst Du dafuer auf bc (s. #9, Sproede) oder awk, perl,...(s.o.) benutzen.
 
bash kann nur Ganzzahlarithmetik, keine floating points - deswegen musst Du dafuer auf bc (s. #9, Sproede) oder awk, perl,...(s.o.) benutzen.
Das hat er wohl schon bemerkt, deswegen cuttet er die Nachkommastellen ab - um dann einen Durchschnitt mit 2 Kommastellen zu berechnen. Das Ganze ist so schräg, dass ich fast meinen Kaffee auf den Monitor gespuckt habe. :D

Die Fehlermeldung: "Divide by zero" lässt vermuten, dass $n Null ist.



Aus Spaß an der Freud, hier noch eine Bash-Bc-Lösung ohne Schleife:
Code:
a=($(<Test.txt));o=${a[*]};echo "scale=2;(${o// /+})/${#a[*]}" | bc
 
Noch eine Möglichkeit

Skript sum.sh
Code:
#! /bin/bash

SUM=0

while read LINE; do
	SUM="`echo "$SUM + $LINE" | bc -l`"
done < $1

echo $SUM
Und dann
Code:
sum.sh /pfad/zur/datei

MfG

Schard
 
Danke euch allen und besonders Spröde, Du hast es wirklich erkannt, dass ich nachkomma abschneide(müsse ich opfern). bc ist mir bekannt, konnte es aber nicht zweckgemäss implementieren. Bei dem Code den Du schreibst war es ein Kinderspiel für dich zu erkennen was ich ereichen wollte :)
 

Ähnliche Themen

sed - Bitte um Unterstützung

Samba Server funktioniert nach Installation von Nextcloud 26 nicht mehr

Hilfe für ein shell script

wget lädt furchtbar langsam

Pi zu einem Netshare service einrichten (SMB + Web)

Zurück
Oben