PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Addiere



fork
19-11-2013, 21:34
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...?


find . -iname "*.avi" -iname "*.mpg" -exec du -sm "{}" \; | awk '{print $1}' | addiere

Oder:


du -sm syslog*gz | awk '{print $1}' | addiere

Das Script:


#!/bin/bash

sum=0
while read line ;do
set $line
while [ -n "$1" ]; do
((sum=$sum+$1))
shift
done
done
echo $sum

quinte17
20-11-2013, 19:54
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 ;)

Selene
21-11-2013, 13:56
~> Sum(){ s=$@;echo $((${s// /+})); }
~> Sum 1 2 3 4
10
~>

fork
12-03-2014, 16:32
@Selene:

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


echo -e '1\n|2\n3\n' | Sum

Geht ned. Natürlich könnte man auch


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.

Selene
16-03-2014, 14:10
~> echo -e '1\n2\n3' | awk '{sum=sum+$0}END {print sum}'
6


"Nett" bedeutet übrigens: "Halte dich da raus, Schwachkopf"

fork
26-07-2014, 11:13
> "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.