wäre das dann nicht ein Fall für sed -i?
... abgesehen von den useless-use-of-cat-Award...
Druckbare Version
wäre das dann nicht ein Fall für sed -i?
... abgesehen von den useless-use-of-cat-Award...
Ja, das geht sicher auch mit sed -i , dann spart man sich das tausendfache kopieren mit cat. Ist eventuell auch noch schneller und schicker.
Ich habe aber eine Abneigung gegen den -i Parameter, denn wenn ich z.B. das Skript mittendrin abbreche, oder es sich als fehlerhaft erweist, dann möchte ich den aktuellen Stand der Ausführung sehen können. Das geht am leichtesten, wenn die Eingabedatei NICHT verändert wird und die Ausgabedatei und alle temporären Dateien bestehen bleiben, bis das Skript seinen Abschluss gefunden hat. Ist also meine spezielle Vorliebe beim Skripte schreiben.
Aber Du hast Recht, es geht schöner als von mir beschrieben.
"evtl."?
Sorry, aber Dein Script ist die böseste IO-Pest, die ich den letzten Jahren hier gesehen habe...
Debug und so in allen Ehren - aber das kommt dann raus, wenn das Ding "ready for production" ist und für's gute Gewissen kopiert man sich vorher die Original-Datei an einen sicheren Platz. 1x.
.... welch böse Worte...Zitat:
böseste IO-Pest
Seh ich genauso... ich kenne aber weder die Struktur der Input-Datei, noch die Struktur der Suchbegriffe (sind da Blanks oder Sonderzeichen drin ?). Von daher sollte man das Skript erst ein paar mal gegen echte Daten laufen lassen. Wenn es prinzipiell fehlerfrei ist, kann man es immer noch schön machen und i/o-technisch optimieren.Zitat:
das kommt dann raus, wenn das Ding "ready for production"
++++++ zwei Stunden später +++++++
Die Kritik von marce hat mich angesport, es noch einmal zu ändern....
Jetzt wird sed mit Parameter -i genutzt. Und was bringt die Optimierung ? 20 % schneller als die erste Variante von mir. Anstatt 52 sekunden (erste Version) macht diese Version es in 42 Sekunden bei einem Testdatenbestand von 30.000 Zeilen input und 2000 Zeilen Suchbegriffe.Code:
cat input.txt > output.txt
while read xx
do
sed -i "/${xx}/{s/^\(.*\)$/\1 -----> ${xx}/g}" output.txt
done < suchbegriffe.txt
exit 0
Und wenn du das ganze dann mit python in memory machst, dann laeuft das ganze noch schneller.
Ich hatte auch mal ein Skrip, welches line per line einen hash basteln musste inkl. aufruf sha...sum, das lief 3 Stunden, mit python in memory, nur noch 10 Minuten ;), aber manchmal ist so eine Digitalheizung ja ganz nett;)
wenn die Datenmenge "in Memory" passt :-)
... mach solche Späße mal mit ein paar GB / TB Logfiles und lass da mal entsprechend gerartete Auswertungen / Aggregationen drüber laufen... - da freut man sich über ein kleines Hadoop-Backend :-)
Hallo fdb123
Sorry, dass ich erst jetzt zurückmelde. Hab ein paar Tage nicht ins Forum geschaut.
Vielen Dank für Dein Script. Das macht genau was es soll und deutlich schneller als mein Anfänger-Script. Es gab auch keine Fehlermeldungen, trotz diverser Sonderzeichen. Die input-Datei ist ein Chatverlauf. Da sind auch Smileys drin. Außerdem normale Sonderzeichen wie "!", "?", Bindestriche, Slashes, Doppelpunkt (wegen URLs) etc.
Ein Dank natürlich auch an alle, die sich beteiligt haben. Ich hab wieder eine Menge dazugelernt. Ich hoffe ich kann meine Erfahrungen hier bald auch weitergeben.