Bash-Tricks: cat Ersetzen durch Umleitungsoperator

Aus Hergipedia
Version vom 14. Januar 2010, 11:19 Uhr von Fkoehler (Diskussion | Beiträge) (→‎Regel)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Bash: Performance Tricks

  1. Zusammenfassen von externen Kommandos: for i in *; ls $i; done
  2. grep Ersetzen durch =~ : ... | grep abc.txt
  3. cat Ersetzen durch < : cat abc.txt

Regel

Der Umleitungsoperator < kann anstelle des cat Befehls benutzt werden, wenn auf den Inhalt einer Datei im Rahmen eines Shellskriptes zugegriffen werden soll.

Damit lässt sich das Skript aus dem vorigen Trick weiter verbessern.

20 Dateien sollen nach dem Vorkommen der Zahl 5 durchsucht werden.

Cygwin Linux
vorher 4.286 s 0.037 s
nachher 2.884 s 0.015 s

(Die meiste Zeit verbringen die Tests jetzt beim Aufruf des externen Kommandos cat).

Demonstration

mkdir bash-performance-tricks
cd bash-performance-tricks
for ((i=0; i<20; ++i )); do 
  echo "Hallo" > $i.txt
  echo "Welt." >> $i.txt
  echo "Dies" >> $i.txt
  echo "ist die $i." >> $i.txt
  echo "Datei." >> $i.txt
done

newline="
"

echo "======== mit cat ============="
treffer=""
time ( for i in *.txt; do 
  datei_inhalt=`cat $i`
  regex='5'
  if [[ $datei_inhalt =~ $regex ]]; then treffer+="$i$newline"; fi
done
echo "=~: Folgende Dateien enthalten die Zahl 5:
$treffer"
)

echo "======== mit < ============="
treffer=""
time ( for i in *.txt; do 
  datei_inhalt=`< $i`
  regex='5'
  if [[ $datei_inhalt =~ $regex ]]; then treffer+="$i$newline"; fi
done
echo "=~: Folgende Dateien enthalten die Zahl 5:
$treffer"
)