ausgabe in veriable speichern?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
latenite
Beiträge: 688
Registriert: 14.05.2007 01:04:23

ausgabe in veriable speichern?

Beitrag von latenite » 19.08.2009 22:33:18

halli hallo

ich würde mit der Zahl die die folgende Zeile ausgibt rechnen und sie in einer Variable speichern

Code: Alles auswählen

for i in `du -bs /home/kai/ /usr/src /usr/lib | awk '{print $1}'`; do summe=$(($summe+$i)); echo $summe; done | tail -n 1
ich habe dies hier schon probiert:

var='for i in `du -bs /home/kai/ /usr/src /usr/lib | awk '{print $1}'`; do summe=$(($summe+$i)); echo $summe; done | tail -n 1'

und

var=`for i in `du -bs /home/kai/ /usr/src /usr/lib | awk '{print $1}'`; do summe=$(($summe+$i)); echo $summe; done | tail -n 1`

und

var=${for i in `du -bs /home/kai/ /usr/src /usr/lib | awk '{print $1}'`; do summe=$(($summe+$i)); echo $summe; done | tail -n 1}

naja, irgendwie muss das an der forschleife liegen? oder?

danke für eure Hilfe :)

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ausgabe in veriable speichern?

Beitrag von Meillo » 19.08.2009 22:55:59

Es geht doch einfacher (Parameter -c):

Code: Alles auswählen

du -bsc /home/kai/ /usr/src /usr/lib | awk '/total$/{print $1}'
Und damit:

Code: Alles auswählen

var="`du -bsc /home/kai/ /usr/src /usr/lib | awk '/total$/{print $1}'`"
Use ed once in a while!

latenite
Beiträge: 688
Registriert: 14.05.2007 01:04:23

Re: ausgabe in veriable speichern?

Beitrag von latenite » 20.08.2009 00:05:49

ok nächstes Mal les ich mir die Optionen mal genauer durch (an dem Kopf fass :roll: )

aber trotzdem....wie WÜRDE ich das Ergebnis aus meiner Zeile in eine Variale geben?

Danke

Methusalix

Re: ausgabe in veriable speichern?

Beitrag von Methusalix » 20.08.2009 00:28:28

Hallo,

@latenite: Du hast in Deiner for...eigentlich schon das Ergebnis. Etwas
abgewandelt:

Code: Alles auswählen

lenny:~# for i in `du -bs /home/user/ /usr/src /usr/lib | awk '{print $1}'`; do summe=$(($summe+$i)); done
lenny:~# echo $summe
555502545
Du kannst hier dann mit $summe weiterarbeiten. Die Schleife kannst Du Dir dennoch sparen.

Meillo`s Vorschlag funktioniert bei mir so nicht. Ich verstehe zwar was mit diesem "total" gemeint ist,
finde es aber nicht dokumentiert. Mein Vorschlag:

Code: Alles auswählen

 var="`du -bs /home/user/ /usr/src /usr/lib | awk '{summe += $1} END { print summe }'`"
lenny:~# echo $var
555502545
Gruß
Matthias

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: ausgabe in veriable speichern?

Beitrag von cosmac » 20.08.2009 00:33:41

hi,

also die 1. und 3. Variante scheitern daran, dass ' und ${ für die Zuweisung an var gar nicht zu gebrauchen sind. Die 2. Variante würde funktionieren, wenn nicht innen drin das du auch in ` eingeklammert wäre. Dadurch wird der öffenende Backtick vom du fälschlich zum schließenden von var=.

Wenn du alle Backticks durch $(...) ersetzt, sollte es klappen. Der Vorteil dieser Konstruktion ist, dass sie sich schachteln lässt, weil die Shell die öffnende und schließende Klammer unterscheiden kann.

Aber muss es denn unbedingt ein Einzeiler sein? Das gewünschte Ergebnis steht doch sowieso in $summe. Also sollte doch das reichen:

Code: Alles auswählen

for i in $(du -bs /home/debu/ /usr/local | awk '{print $1}'); do summe=$(($summe+$i)); done
echo $summe
Beware of programmers who carry screwdrivers.

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ausgabe in veriable speichern?

Beitrag von Meillo » 20.08.2009 13:23:35

cosmac hat geschrieben:Aber muss es denn unbedingt ein Einzeiler sein? Das gewünschte Ergebnis steht doch sowieso in $summe. Also sollte doch das reichen:

Code: Alles auswählen

for i in $(du -bs /home/debu/ /usr/local | awk '{print $1}'); do summe=$(($summe+$i)); done
echo $summe
Aber dann doch wirklich lieber mit `-c' bei `du', da läuft die Berechnung automatisch.

Dass es bei Matthias-GE nicht funktioniert liegt wohl an einer deutschen Lokalisierung. Man könnte es so sprachunabhängig machen:

Code: Alles auswählen

var="`du -bsc /home/kai/ /usr/src /usr/lib | tail -n 1 | cut -f1`"
(Übrigens scheint `-b' nicht portabel zu sein, mein NetBSD kennt's jedenfalls nicht.)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ausgabe in veriable speichern?

Beitrag von Meillo » 20.08.2009 13:31:15

Matthias-GE hat geschrieben:Meillo`s Vorschlag funktioniert bei mir so nicht. Ich verstehe zwar was mit diesem "total" gemeint ist,
finde es aber nicht dokumentiert.
du(1) hat geschrieben:-c Display the grand total after all the arguments have been processed.
somit:

Code: Alles auswählen

$ du -sc  /usr/src /usr/lib
555768  /usr/src
70808   /usr/lib
625880  total
Meine RegExp /total$/ matched auf eine Zeile mit ``total'' am Ende. Du wirst wohl kein englisches System haben, damit steht bei dir auch nicht ``total'' sondern vielleicht ``Summe'' oder was ähnliches dran. Aber ich gebe ja auch zu, dass /total$/ noch auf viel mehr matchen kann als auf die letzte Zeile. Deshalb besser die Version aus meinem vorigen Post verwenden, die ist zudem klarer verständlich.
Use ed once in a while!

latenite
Beiträge: 688
Registriert: 14.05.2007 01:04:23

Re: ausgabe in veriable speichern?

Beitrag von latenite » 20.08.2009 13:56:39

hey danke an alle

@cosmac das mit dem $(...) hat geholfen...das werde ich sicherlich jetzt öfter so machen!

und ja.ich nutze du -c ...das hatte ich nur übersehen... :)

Methusalix

Re: ausgabe in veriable speichern?

Beitrag von Methusalix » 21.08.2009 01:09:41

Hallo,

@Meillo: Du hast natürlich recht; es liegt bei mir an der deutschen Lokalisierung. Es war gestern zu spät, so
das ich da einfach nicht drauf gekommen bin.
Die von mir oben gepostete Lösung mit awk halte ich allerdings für konkurrenzfähig.:)
Ist doch auch schön, das es meist mehrere Lösungsmöglichkeiten gibt.
Gruß
Matthias

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ausgabe in veriable speichern?

Beitrag von Meillo » 21.08.2009 10:07:17

Matthias-GE hat geschrieben:Die von mir oben gepostete Lösung mit awk halte ich allerdings für konkurrenzfähig.:)
Nunja, nicht ganz so elegant, aber immerhin wird nicht in der Shell gerechnet (was immer ziemlich hasslich ist (vor allem wenn bashism genutzt wird)).

Mit deiner Lösung könnte ich auf jeden Fall leben. ;-)
Use ed once in a while!

Antworten