wäre das dann nicht ein Fall für sed -i?
... abgesehen von den useless-use-of-cat-Award...
wäre das dann nicht ein Fall für sed -i?
... abgesehen von den useless-use-of-cat-Award...
Ich bin root - ich darf das.
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.
Geändert von fdb123 (01.04.20 um 16:42 Uhr)
"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.
Ich bin root - ich darf das.
.... welch böse Worte...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.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
Geändert von fdb123 (01.04.20 um 18:03 Uhr)
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
Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.
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 :-)
Ich bin root - ich darf das.
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.
Lesezeichen