Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Addiere

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444

    Addiere

    Oft gewünscht, nie gehabt: das Addiere Shellscript.

    Was machts: Zahlen reinwerfen - auch mehrere pro Zeile - Summe ausgeben. Mindestens so lebensnotwendig wie tac.

    Warum?

    Beispiel: Wieviel Platz verbraucht...?
    Code:
    find . -iname "*.avi" -iname "*.mpg" -exec du -sm "{}" \; | awk '{print $1}' | addiere
    Oder:
    Code:
    du -sm syslog*gz | awk '{print $1}' | addiere
    Das Script:
    Code:
    #!/bin/bash
    
    sum=0
    while read line ;do 
    	set $line
    	while [ -n "$1" ]; do
    		((sum=$sum+$1))
    		shift
    	done
    done
    echo $sum
    Geändert von fork (19-11-2013 um 22:40 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    also bei du verstehe ich jetzt nicht warum man das braucht...
    du -csm *
    macht doch das selbe..
    dass bei dem find das nicht klappt liegt eher daran, dass hier du immer nur einzeln gerufen wird. hier sollte xargs verwendet werden:
    http://de.wikipedia.org/wiki/Xargs

    aber natürlich war das als übung ganz gut

  3. #3
    Registrierter Benutzer Avatar von Selene
    Registriert seit
    26.08.2012
    Beiträge
    9
    Code:
    ~> Sum(){ s=$@;echo $((${s// /+})); }
    ~> Sum 1 2 3 4
    10
    ~>

  4. #4
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    @Selene:

    Nett. Tut aber nicht das, was ich oft will/brauche:

    Code:
    echo -e '1\n|2\n3\n' | Sum
    Geht ned. Natürlich könnte man auch

    Code:
    Sum $( echo -e '1\n2\n3\n'  )
    schreiben, aber das ist unpraktisch.

    @quinte:

    Natürlich kenne ich xargs. Wenig schreiben ist hier Trumpf. Und es geht nicht nur um du. Ich will halt alles an Kommandokette, was mir eine Reihe von Zahlen rauswirft mal addieren.

  5. #5
    Registrierter Benutzer Avatar von Selene
    Registriert seit
    26.08.2012
    Beiträge
    9
    Code:
    ~> echo -e '1\n2\n3' | awk '{sum=sum+$0}END {print sum}'
    6
    "Nett" bedeutet übrigens: "Halte dich da raus, Schwachkopf"

  6. #6
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    > "Nett" bedeutet übrigens: "Halte dich da raus, Schwachkopf"

    Keine Sorge. Ich habe keinen Bedarf dich beleidigen zu wollen.
    Tut mir leid, falls Du das als Beleidung aufgefasst hast.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •