Frage zu Variablen in Bash-Script
Hallo Leute, Das entsprechende Script holt sich zur Zeit innerhalb einer Schleife mittels grep Daten aus einer Datei und verarbeitet Sie dann entsprechend weiter. Da die Schleife ca. 200mal durchlaufen wird und bis zu ca. 5 mal pro sekunde der grep-Befehl ausgeführt wird, glaube ich, es wäre sicher eleganter, wenn man den Inhalt der Datei in eine Variable lesen könnte. Wie kann man das machen, das die Zeilen in der Variable mit übernommen werden? Gibt es da vielleicht Arrays, wie in C bzw. Hashes, wie in Perl? Wäre das sinnvoll, oder ist das egal, wie oft ich auf eine Datei zugreife? Mfg, Thomas
Hi On Wednesday 13 August 2003 12:10, thomas Gräber wrote:
Hallo Leute,
Das entsprechende Script holt sich zur Zeit innerhalb einer Schleife mittels grep Daten aus einer Datei und verarbeitet Sie dann entsprechend weiter. Da die Schleife ca. 200mal durchlaufen wird und bis zu ca. 5 mal pro sekunde der grep-Befehl ausgeführt wird, glaube ich, es wäre sicher eleganter, wenn man den Inhalt der Datei in eine Variable lesen könnte. Wie kann man das machen, das die Zeilen in der Variable mit übernommen werden? Gibt es da vielleicht Arrays, wie in C bzw. Hashes, wie in Perl? Arrays gibt es. Ob das hilft weiß ich allerdings nicht. Die Antwort hängt in hohem Maße davon ab, was du in deiner Schleife machst. Wo du redundante Schritte machst kann ohne bessere Kenntnis deiner Schleife niemand wissen. Holt grep jedesmal die gleichen Daten und die Weiterverarbeitung ändert sich mit dem Schleifenparameter, oder ist die Weiterverarbeitung gleich und der Ausdruck mit dem grep sucht ändert sich? "Holt" sich grep überhaupt jedesmal Daten? Eventuell hilft es bereits dein Skritp in mehrere aufzuspalten bzw. Teile in eine Subshell auszulagern. Du kannst dann die "geholten Daten" Zeilenweise in 'nem anderen Skript/'ner Subshell mit read auswerten.
Einige Konzepte sind in diesem relativ sinnlosen Skript verwendet: <======== cat ~/file.txt| grep <wichtige Zeilen> |{ #alles Weitere wird nur auf "wichtigen #Zeilen ausgeführt" b=1 while read a do echo "Zeile $b:" #hier echo $a #muesste die Verarbeitung hin c[$b]=$a #file.txt wird Zeilenweise in den Feldern von c #abgelegt b=`expr $b + 1` done #hier kann man aufs array zugreifen } #hier allerdings nicht mehr exit 0 ========>
Wäre das sinnvoll, oder ist das egal, wie oft ich auf eine Datei zugreife?
Die Anzahl der Dateizugriffe ist sicher nicht unwichtig. Was man machen kann um die Geschwindigkeit zu verbessern hängt sehr vom Einzelfall ab. mfg Axel
thomas Gräber wrote:
Das entsprechende Script holt sich zur Zeit innerhalb einer Schleife mittels grep Daten aus einer Datei und verarbeitet Sie dann entsprechend weiter. Da die Schleife ca. 200mal durchlaufen wird und bis zu ca. 5 mal pro sekunde der grep-Befehl ausgeführt wird, glaube ich, es wäre sicher eleganter, wenn man den Inhalt der Datei in eine Variable lesen könnte. Wie kann man das machen, das die Zeilen in der Variable mit übernommen werden? Gibt es da vielleicht Arrays, wie in C bzw. Hashes, wie in Perl?
Eine nette Anleitung zur BASH: http://www.linuxfibel.de/bash.htm -- Andreas
participants (3)
-
Andreas Winkelmann
-
Axel Heinrici
-
thomas Gräber