2 Spalten in EINER Textdatei GETRENNT addieren

N

Nicho

Jungspund
Hey,
bin ein ziemlicher Neuling in Sachen programmieren. Nun steh ich vor dem Problem, dass ich 2 Zahlenspalten inner Textdatei (vim) getrennt addieren muss. Diese sind durch ein "/" getrennt.
Bsp.:
72 / 72
68 / 72
72 / 72
0 / 24
usw.
Waere nett wenn ihr paar Vorschlaege habt. Bei meinem Skript (
{ while read zahl
do
x=$(($x+$zahl))
done
echo $x >Auslastung2
} addiert er irgendwie nur eine Spalte.
Vg Nico
 
Sobald du Spaltenabhängig rechnen musst, ist awk ganz fein:

awk -F '/' '{sum1 += $1; sum2 += $2} END {print sum1,sum2}' inputfile.txt


-F ist der fielseperator also /.
Dann kommt die Anweisung für sum1, also alles in spalte $1 zusammenzählen, selbiges für sum2.
Dann kommt die END-Regel, damit nur ganz am schluss ein print von sum1 und 2 gemacht wird, ansonsten bekommst du alle Zwischenergebnisse ausgeworfen.


Wirft dann
212 240
aus.
 
Vielen herzlichen dank ;0 klappt so wie ichs wollte, noch ne frage falls du zufaellig zeit hast, wenn net stoeber ich noch bissl in google, und zwar:
der hat ja jetze in meinem beispiel 212 240 ausgeworfen (in meiner datei 16786 19400) wie koennte man das jetzt asugeben lassen das er das in % angibt (also wieviel % sind 212 von 240 ////// 16786 von 19400)
 
geht alles:

Code:
awk -F/ '{s1+=$1;s2+=$2} END { printf "summe1: %s summe2 %s prozent: %6.2f\n",s1,s2,s1/s2*100}' datei.txt
 
Easy:

awk -F '/' '{sum1 += $1; sum2 += $2} END {perc=sum1/sum2*100; print perc}' input.txt
 
Ist jetzt so das ich dann statt '{print sum1 .. und sum 2 bla bla geschrieben hab,(da ich textausgabe machen muss)
{print "Es sind " sum2 " " sum1 " Slots belegt." }'
und dann moechte ich noch dahinte die prozentausgabe haben, inder art wie hier:
awk '{print "Das sind blablub%}'
braeuchte dafuer nur die rechnung
 
Machst den Prozentteil nach vorne, am Schluss kannst alles Ausgeben wie du willst.

awk -F '/' '{sum1 += $1; sum2 += $2; perc=sum1/sum2*100} END {print sum1,sum2,perc}' inputfile.txt
 
Ok habe jetzt:
awk -F '/' '{sum1 += $2; sum2 += $3} END {print "Es sind " sum2 " " sum1 " Slots belegt." " Das sind " sum1/sum2*100"%" }'.
Da springt dann 95,...% raus. Die Zahlen waren 18538/19400 sind da 95% nicht bissl viel?
 
Jojo is alles perfekt, danke fuer deine Zeit und Hilfe ;D
 
Doch noch was, sry ;D, also ich hab ja das Programm oben schon hingeschrieben, (hier nochmal)
awk -F '/' '{sum1 += $2; sum2 += $3} END {print "Es sind " sum1 " von " sum2 " Slots belegt." " Das sind " sum1/sum2*100"%" }'
Da kommt aber irgendwie 95% und noch 4 kommastellen raus, ich vermute da sind tausende kommmastellen und er rundet es selbst auf 4, wie kann ich es nun asugeben lassen dass er mir nur ne gerunde zahl ohne komma, also z.B. wenns 95,643* ist dass er nur 96 ausgibt?
 
Kleiner tipp noch.

Mach die % besser so perc=(sum1*100)/sum2, ist in Bezug auf Floating-Point-Genauigkeit der bessere weg, sonst könnten es eher seltsame Nachkommastellen geben.
 
awk -F '/' '{sum1 += $1; sum2 += $2; perc=(sum1*100)/sum2} END {printf "%s von %s prozent: %.0f %",sum1,sum2,perc}'

Da brauchst du dann printf um im print die kommastellen anzugeben %.0f
 
Kannst du das auf mein obiges Programm uebernehmen? Checke das nicht richtig, Hier nochmal das neue Programm mit deinem Tipp vo oben;
awk -F '/' '{sum1 += $2; sum2 += $3} END {print "Es sind " sum1 " von " sum2 " Slots belegt." "Das sind " (sum1*100)/sum2"%"
 
Kannst du das nochmal auf mein Programm uebertragen? Checke das noch nicht so richtig. Hier nochmal das Neue Programm mit deinem Tipp von oben:
awk -F '/' '{sum1 += $2; sum2 += $3} END {print "Es sind " sum1 " von " sum2 " Slots belegt." "Das sind " (sum1*100)/sum2"%"
 
Jo danke klappt aber irgendwie buggt das hier. Nach dem ausgeben steht dann die Kommandozeile zum erneuten eingeben von irgendwas hinter dem ergebnis und nicht wie normal darunter. Ideen?
Edit: also so:
Es sind 16074 von 19400 Slots belegt. Das sind 83 %newton>
das newton is dann halt die neue kommando zeile die eigtl. darunter stehen sollte.
 
Hast das \n mit dabei, das ist ein newline, hab ich beim ersten mal vergessen und kurz darauf dran editiert....
 
Zurück
Oben