Useless use of cat

Written by  on September 27, 2014 

Einerseits: Was soll die Aufregung um einen nutzlosen zusätzlichen Befehl der auf der Shell eingegeben wird?

Andererseits: Glaube nur dem was Du selber gemessen hast!

Also wie messen wir, um wie viel langsamer ein nutzloses cat-Command ist?

Dazu ein kleiner Setup, mit ein paar Testdaten – File a:

a
a
a
a
b
b
b
b
b
a
b
ab
ba

Und ein Script test1.sh, mit dem useless cat:

#/bin/bash
cat a | grep b

Und ein Script, test2.sh, ohne useless cat:

#!/bin/bash
grep b a

Beide Scripts je 2 Mal ausgeführt:

# time ./test1.sh > /dev/null
real 0m0.227s
user 0m0.012s
sys 0m0.024s
# time ./test2.sh > /dev/null
real 0m0.045s
user 0m0.012s
sys 0m0.004s
# time ./test1.sh > /dev/null
real 0m0.026s
user 0m0.012s
sys 0m0.008s
# time ./test2.sh > /dev/null
real 0m0.013s
user 0m0.000s
sys 0m0.004s

Die Umleitung nach /dev/null ist dazu da, dass der Output keine Auswirkung auf die Geschwindigkeit hat. Beim ersten Aufruf, merkt man, dass hier erst das Script und die Testdaten erst in den Cache geladen werden.

test2.sh läuft beim 2. Aufruf also doppelt so schnell!

Was machen die 0,013 Sekunden Unterschied schon aus? Das sehen wir, sobald das ganze in eine Schleife verpacken:

# time for i in {0..100..1}; do ./test1.sh; done > /dev/null
real 0m7.765s
user 0m0.936s
sys 0m2.000s
# time for i in {0..100..1}; do ./test2.sh; done > /dev/null
real 0m3.827s
user 0m0.496s
sys 0m0.896s

Das Fazit also: Finger weg vom nutzlosen cat-Command!

Category : Allgemein

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.