Sed-Script ist zu langsam. Perl bzw. AWK als alternative?

Mitglied: Gustaff

Gustaff (Level 1) - Jetzt verbinden

14.01.2021, aktualisiert 10:40 Uhr, 484 Aufrufe, 11 Kommentare

Hallo an alle Mitglieder!

Ich folgende Frage. Ich habe ein SED-Script, die alle falsch kodierte UTF-8-Symbole durch normale Symbole ersetzt.

Es funktioniert wie folgt:

sed -f Replace.sed Muster.txt > Muster1.txt

Replace.sed sieht wie folgt aus (als Beispiel. Originale Datei beinhaltet fast 70.000 Zeilen):

Nun ist klar, dass sed-Script zu langsam ist, wenn ich eine txt-Datei von der Größe von 2GB (also mehrere Millionen Zeilen) korrigieren muss. Die Lösung den Script auf mehrere kleinere Scripts zu verteilen ist nicht zielführend.
Kann man so einen Script mit AWK oder Perl umschreiben, damit es schneller geht? Leider habe ich da nicht so viel Ahnung.

Danke!
Mitglied: StefanKittel
LÖSUNG 14.01.2021, aktualisiert um 10:43 Uhr
Nun ist klar, dass sed-Script zu langsam ist, wenn ich eine txt-Datei von der Größe von 2GB (also mehrere Millionen Zeilen) korrigieren muss.
Definiere doch bitte mal langsam?
2 Minuten? 2 Stunden? 2 Tage?

Kann man so einen Script mit AWK oder Perl umschreiben, damit es schneller geht? Leider habe ich da nicht so viel Ahnung.
SED ist ein kompiliertes Programm. Es ist per Definition schneller als Pearl und AWK da dieses Skript-Sprachen sind.

Wobei AWK genau dafür gemacht wurde.
Müsste man schlicht ausprobieren.

Dein Problem kommt rein von der rechenleistung.
Für jedes Zeichen in Deinen 2GB muss er 70.000 Vergleiche durchführen.

2.000.000.000 x 70.000 = 140.000.000.000.000 Vergleiche + Die Ersetzungen

Wichtig ist, dass Du möglichst alles in den RAM bekommst.
Ich weiß halt nicht wie schlau SED programmiert ist.

Am einfachsten wäre ein eigenes Programm in C# C++ schreiben (lassen).
Das sollte nicht so aufwendig sein.

Stefan
Bitte warten ..
Mitglied: Gustaff
14.01.2021, aktualisiert um 11:17 Uhr
txt-Datei besteht aus 60.000.000 Zeilen.

Es werden pro Stunde ca. 500 Zeichen aus sed-Script bearbeitet und ersetzt.

Macht insgesamt fast 8 Tage.

Danach muss Script nochmals wiederholt werden, um alle neu entstehende Zeichenkombinationen zu korrigieren.

Also - zusammen 16 Tage.
Bitte warten ..
Mitglied: StefanKittel
14.01.2021 um 11:14 Uhr
Hallo,

witzig, passt

70.000 Zeichen zum ersetzem
10 Zeichen/Sekunde (geraten)
700.000 Sekunden
11.667 Minuten
194 Stunden
8,10 Tage

Ich denke, dass man mit einem optimierten Multithreadingprogramme durchaus in den einstellungen Stundenbereich vorstoßen kann.
Dass muss natürlich Jemand programmieren.

Ich glaube kaum, dass Du da mit einer Skript-Lösung deutlich schneller wirst.

Stefan
Bitte warten ..
Mitglied: Gustaff
14.01.2021, aktualisiert um 11:23 Uhr
Ok. Dann bin ich falsch in diesem Thread. Danke! Ich werde dann unsere Programierer fragen, viellleicht findet jemand Zeit dafür.
Bitte warten ..
Mitglied: 147069
147069 (Level 1)
14.01.2021, aktualisiert um 11:30 Uhr
Wenn's um Kodierungskorrektur geht, würde mir an deiner Stelle stattdessen mal iconv anschauen
https://linux.die.net/man/1/iconv
Bitte warten ..
Mitglied: Gustaff
14.01.2021, aktualisiert um 11:58 Uhr
Bringt nichts - in der Textdatei sind mehrere Kodierungen zusammengemischt: UTF8, UTF16LE, KOI8-R, Win1252, Wind1251, Win1256, usw....
Bitte warten ..
Mitglied: 147069
147069 (Level 1)
14.01.2021, aktualisiert um 12:08 Uhr
Oi, da hat sich aber einer ausgetobt :-D face-big-smile.

SED ist aber schon eines der schnellsten unter den Produkten zur Änderung von Dateien.
Bitte warten ..
Mitglied: Gustaff
14.01.2021, aktualisiert um 12:25 Uhr
Das passiert, wenn ein .... einige Dateien von diversen Weltniederlassungen automatisch per Script zusammenfügt und vergisst dabei die Config-Datei entsprechend zu ändern. Vor allem eine Zeile, die für Löschung von Originaldateien sorgt. :-( face-sad

PS: Einer von unseren Programmierer macht es mit C++ heute abend. ;-) face-wink
Bitte warten ..
Mitglied: tagol.de
LÖSUNG 14.01.2021 um 13:19 Uhr
Zitat von Gustaff:
sed -f Replace.sed Muster.txt > Muster1.txt
>....

Nun ist klar, dass sed-Script zu langsam ist, wenn ich eine txt-Datei von der Größe von 2GB (also mehrere Millionen Zeilen) korrigieren muss.

stichwort: parallel

mit "parallel" habe ich schon einige challenge gegen programmierer bzgl. performce gewonnen.

z.b.:
siehe dazu: linux bash parallel
Bitte warten ..
Mitglied: Gustaff
14.01.2021 um 13:40 Uhr
Danke! Das habe ich nicht gewusst. Leider habe ich den Befehl nicht im System. :-( face-sad Und unser Admin ist diese Woche nicht da. Trotzdem vielen Dank! ;-) face-wink
Bitte warten ..
Mitglied: Penny.Cilin
14.01.2021 um 19:25 Uhr
Zitat von StefanKittel:

Nun ist klar, dass sed-Script zu langsam ist, wenn ich eine txt-Datei von der Größe von 2GB (also mehrere Millionen Zeilen) korrigieren muss.
Definiere doch bitte mal langsam?
2 Minuten? 2 Stunden? 2 Tage?

Kann man so einen Script mit AWK oder Perl umschreiben, damit es schneller geht? Leider habe ich da nicht so viel Ahnung.
SED ist ein kompiliertes Programm. Es ist per Definition schneller als Pearl und AWK da dieses Skript-Sprachen sind.
@Stefan
Pearl != Perl
Ja ich weiß ein Vertippper. ;-) face-wink

Gruss Penny.
Bitte warten ..
Heiß diskutierte Inhalte
Wünsch Dir was
Das ist ja nicht auszuhalten, dass ich für jeden googlen soll
NordicMikeVor 16 StundenAllgemeinWünsch Dir was22 Kommentare

Ich beantrage, dass bei jeder Beitragserstellung eine Checkbox angeklickt werden muss, mit dem Text: Ja, ich habe bereits danach gegoogelt. Ansonsten soll der "Senden" ...

Rechtliche Fragen
Adobe Flash erneut aktivieren, IT-Sicherheit + Datenschutz
anteNopeVor 1 TagFrageRechtliche Fragen14 Kommentare

Hallo zusammen, ich weiß es ist noch nicht Freitag aber mir ist hier gerade die Kinnlade bis in den Keller gefallen. Opel (ja der ...

Windows 10
Wie kann ich mehrere PCs gleich aufsetzten (mit User)
dressaVor 1 TagFrageWindows 1010 Kommentare

Hallo miteinander. Wie kann ich mehrere PCs (über 200) gleich aufsetzten. Ich habe etwa 4 Modele die sich nur von der Baugeneration unterscheiden. Also ...

Flatrates
Mobilfunktarife für die Firma (günstig)
gelöst ingo1988Vor 1 TagFrageFlatrates13 Kommentare

Hallo, kann mir jemand weiterhelfen im Bezug auf Mobilfunktarife für Unternehmen? Ich suche nämlich günstige Angebote im Telekom oder Vodafone Netz, ähnlich wie Lidl ...

Microsoft
Wie verteilt Ihr Software im AD auf die Clients? GPO?
Der-PhilVor 1 TagFrageMicrosoft14 Kommentare

Hallo! Die Kernfrage steht eigentlich schon im Titel: Wie verteilt ihr Software und haltet sie aktuell auf den Clients? Bislang mache ich das alles ...

Hardware
Homelab - Gebrauchte Server Hardware?
gelöst kernl33Vor 18 StundenFrageHardware16 Kommentare

Hallo zusammen, ich plane mir für mein Homelab einen 19 Zoll Server (2-4HE) anzulegen, es soll ein Hypervisor mit diversen VMs laufen. Hier zu ...

Cloud-Dienste
Server über zwei WAN Leitungen mit Load Balancing verfügbar machen
tobitobsnVor 1 TagFrageCloud-Dienste13 Kommentare

Moin zusammen, ich plane, einen Server im WAN über zwei Leitungen (Kabel und DSL) zwecks Ausfallsicherheit und Load Balancing verfügbar zu machen. Es sind ...

Festplatten, SSD, Raid
SATA Treiber für HP
ben1300Vor 11 StundenFrageFestplatten, SSD, Raid15 Kommentare

Hallo zusammen, ich habe einen PC von HP (Seriennummer: CZC3475D5D) Wollte hier Windows 7 Prof. installieren - es fehlt der SATA Treiber Leider kann ...