Werkzeug für 42,1MB große Textdatei (ca. 500.000 Zeilen)

S

sevY

Hi zusammen,

ich habe eine 42,1MB große Textdatei (ca. 500.000 Zeilen), aus der ich gerne einen Auszug nehmen möchte.
Es handelt sich dabei um SQL Statements.

Nun ist es so, das SubEthaEdit und Textedit wohl zu schwach dazu sind… bei einem G4 1,33 GHZ Prozessor und 1,5GB RAM dauert es immerhin bis zu 90 Sekunden, bis die Datei geöffnet ist… aber jeder Scrollversuch zwingt die Applikation dann in die Knie.

Was allerdings halbwegs gut geht… mittels Terminal und pico, nano, less, more, vi usw. die Datei öffnen… das geht sehr sehr schnell… nur kann ich eben da nicht einfach z.B. Zeile 3000-4000 herauskopieren, da die Datei sehr lange Zeilen hat und im Editor diese durch ein $ angekürzt werden.

Jemand eine Idee?
 
welche form haben die SQL-statements? sind das inserts und/oder create anweisungen?

weisst du, welchen teil du benoetigst, d.h. kannst du die position in der datei bestimmen?
 
vi aus dem Terminal sollte damit locker umgehen können.
 
falkgottschalk schrieb:
vi aus dem Terminal sollte damit locker umgehen können.
Yves schrieb:
Was allerdings halbwegs gut geht… mittels Terminal und pico, nano, less, more, vi usw. die Datei öffnen… das geht sehr sehr schnell… nur kann ich eben da nicht einfach z.B. Zeile 3000-4000 herauskopieren, da die Datei sehr lange Zeilen hat und im Editor diese durch ein $ angekürzt werden.

Was ist mit TextWrangler? Wegus schwärmt doch immer davon, dass der so super fix sein soll. Das ist die Bewährungsprobe! ;)
 
Wenn Du in vim beispielsweise die Zeilen 3000-4000 in eine andere (neue) Datei kopieren möchtest, gibst Du folgendes ein:
Code:
:3000,4000w neue_Datei.txt
Eigentlich recht einfach, finde ich ;).

Man kann in vim auch mehrere Dateien gleichzeitig öffnen und von einer Datei in die andere kopieren (sinnvoll finde ich dabei die Funktion :split).
Und wenn das immer noch nicht reicht, kann man mit benannten buffers (Zwischenpeichern) arbeiten, die man getrennt einfügen kann.
Sehr praktisch.
 
admartinator schrieb:
Was ist mit TextWrangler? Wegus schwärmt doch immer davon, dass der so super fix sein soll. Das ist die Bewährungsprobe! ;)
Bei so einer großen Datei kackt TextWrangler ab. Habe das mal mit eine 30MB Textdatei probiert, keine Chance. Vielleicht schafft es BBedit.
 
Wie waers mit Bordmitteln?
Code:
head -4000 datei.txt | tail -1000 >auszug.txt
oder sowas? Sollte eigentlich gehen.
Wile
 
Yves schrieb:
Was allerdings halbwegs gut geht… mittels Terminal und pico, nano, less, more, vi usw. die Datei öffnen… das geht sehr sehr schnell… nur kann ich eben da nicht einfach z.B. Zeile 3000-4000 herauskopieren, da die Datei sehr lange Zeilen hat und im Editor diese durch ein $ angekürzt werden.

Jemand eine Idee?

mach das terminal fenster doch größer...
oder benutz halt grep, um nur die statements zu kriegen die du haben willst...

wenn du es doch mit gui machen willst, dann probier halt textwrangler (ich hatte damit bei großen text source files noch keine probleme, im gegensatz zu mkoessling) oder alpha oder oder....
oder als joker kannst du auch hexedit nehmen...
 
Hi!

ich bin ebenfalls auf der Suche und habe schon versch. Editoren ausprobiert um etwas ähnliches wie der Thread-Starter zu machen.
Mit subEtheEdit, BBEdit, Textwrangler und TextEdit ;) hab ichs schon versucht, Fazit = unzumutbar nicht arbeitsfähig.

Mein File war allerdings "nur" ca. 30MB groß...
Unter Win würde ich sowas mit UltraEdit machen, der BBedit wird ja immer etwas mit dem verglichen aber das kann er doch ned so einfach...

Und die Boardmittel kannst du vergessen, zumindest bei mir, da ich nicht weiß ab welcher Zeile ich was kopieren will, das sehe ich halt dann wenn ichs sehe und markiere ab da und kopiere es ;)
 
Ich hab mich mal für "Vulgär PHP" entschieden.
Da konnte ich dann nach dem gewünschten Datenbanknamen suchen, dessen Abschnitt logischerweise durch das nächste Create Database Statement abgeschlossen wurde.
Klappte übrigens mit einer gut 350MB großen SQL Datei.

Hab da auch etwas in meinem Blog geschrieben…

PHP:
<?php
function extractPattern($init,$end,$src_file,$dest_folder) {
    if($type=explode('.',$src_file)) {
        $type=array_reverse($type);
        $type=$type[0];
    } else {
        $type='';
    }
    @mkdir($dest_folder);
    @chmod($dest_folder,intval(0777));
    $timestamp=date('U');
    if(@file_put_contents($dest_folder.'/'.$init.'_'.$end.'_'.$timestamp.'.'.$type,substr(file_get_contents($src_file),strpos(file_get_contents($src_file),$init),(strpos(file_get_contents($src_file),$end)-strpos(file_get_contents($src_file),$init))))) {
        return $dest_folder.'/'.$init.'_'.$end.'_'. $timestamp.'.'.$type;
    } else {
        return false;
    }
}

readfile(extractPattern('key1','key2','complete.sql','./suchergebnisse'));
?>
 
@Yves:
Danke! Das werde ich heute mal ausprobieren, sieht aber denke ich ganz gut aus und könnte ich genauso für meine Zwecke verwenden.

Hab in deinem BLOG auch mal gestöbert, wenn nichtmal ein G5 2,5 sowas ordentlich schafft bin ich echt schwer enttäuscht.
Da haben wir doch schon so eine Killer-Applikation, anscheinend gibt es naemlich nix anständiges unter MacOS.
Gut das da oben geht nur für MySQL, was ist mit einem wirklichen TextFile oder etwas anderem großen.

Schade eigentlich, so nen Editor fehlt mir einfach noch...

Trotzdem Danke für den Code :)
 
Yves schrieb:
Nun ist es so, das SubEthaEdit und Textedit wohl zu schwach dazu sind… bei einem G4 1,33 GHZ Prozessor und 1,5GB RAM dauert es immerhin bis zu 90 Sekunden, bis die Datei geöffnet ist… aber jeder Scrollversuch zwingt die Applikation dann in die Knie.
Nicht wirklich. Es dauert dann nur noch eine Zeit, bis die Datei komplett geladen ist. Warte mal ein paar Minuten (bis der Scollbalken nicht mehr kleiner wird), dann kannst Du ganz normal damit arbeiten.
 
._ut schrieb:
Warte mal ein paar Minuten (bis der Scollbalken nicht mehr kleiner wird), dann kannst Du ganz normal damit arbeiten.

„Ein paar Minuten warten“ und „ganz normal damit arbeiten“ vertragen sich meiner Meinung nach nicht unbedingt erstklassig.
In Bezug auf das Warten und komplette Laden der Datei… bei eingeschaltetem Syntax Highlighting habe ich die ganze Zeit nur die "Todespizza" oder "Sat1 Ball" gesehen… war auch nach bestimmt 10 Minuten noch da… und ohne Syntaxhighlighting hat das nur der G5 geschafft… aber auch nach knapp 3-4 Minuten erst.

Ich denke jedoch nicht, das es hier am G5 oder so liegt… es ist eher eine Frage der Applikation.
TextEdit hingegen konnte das deutlich schneller öffnen… aber da gab es ein Problem mit der Zeichenkodierung.

Naja… und die Head/Tail Geschichte im Terminal oder das PHP Script schafft das ganze überaus performant. Auch auf dem G4 1,33 GHz.

Ich hab aus Spaß mal sämtliche SQL Backups dieser Woche verschweisst und somit eine 2,45GB große Datei erhalten, aus welcher ich problemlos mittels des PHP Scripts in unter 40 Sekunden ein gewünschtes Pattern extrahieren konnte.
 
bei der Größe nur vi(m) !

@ad: Es gibt einen Unterschied zwischen Mut und Wahnsinn ;) 42MB in Textwrangler ist denn doch etwas happig :), im Gegensatz zu SEE aber machbar.

Yves schrieb:
TextEdit hingegen konnte das deutlich schneller öffnen… aber da gab es ein Problem mit der Zeichenkodierung.

Die Codierung muß man bei Textedit manchmal manuell nachbesser, da ist SEE klar vorn!
 
Zuletzt bearbeitet:
Diese Editoren sind ja auch alle für grafisch aufbereiteten Text gedacht, das erfordert wesentlich mehr Ressourcen und dieser Mehraufwand steigt nicht linear mit der Textlänge... vi kann damit natürlich umgehen. Was ist mit grep, wenn es nur um Mustersuche geht? Oder ein perl-Einzeiler, wenn der reguläre Ausdruck komplex ist, heh.
 
Kann mich der Empfehlung vi(m) nur anschließen. Bei arg langen Zeilen hilft wohl nur eine Vorverarbeitung der Datei, ansonsten wird das Hantieren mit dem File unbequem. Daher meine Empfehlung: Bringe die Datei erst einmal in "Form". Ob ganz klassisch mit ex (vi), sed, awk etc. oder "modern" - z.B. Perl -, hängt vom jeweiligen Einzelfall und den persönlichen Vorlieben ab.
 
Yves schrieb:
„Ein paar Minuten warten“ und „ganz normal damit arbeiten“ vertragen sich meiner Meinung nach nicht unbedingt erstklassig.
In Bezug auf das Warten und komplette Laden der Datei… bei eingeschaltetem Syntax Highlighting habe ich die ganze Zeit nur die "Todespizza" oder "Sat1 Ball" gesehen… war auch nach bestimmt 10 Minuten noch da… und ohne Syntaxhighlighting hat das nur der G5 geschafft… aber auch nach knapp 3-4 Minuten erst.
Ich habe an meinem 450MHz-Cube schon deutlich größere Dateien geöffnet. Man muss halt warten, bis das fertig ist. Geduld ist eine Tugend, mit der man manchmal viel Zeit sparen kann. Der Sat1-Ball bezieht sich ja nur auf das Programm, dass gerade die Datei öffnet, alles andere funktioniert ja wie immer. Solange kann man ja bei MacUser rumhängen oder andere Arbeiten machen.
Naja… und die Head/Tail Geschichte im Terminal oder das PHP Script schafft das ganze überaus performant. Auch auf dem G4 1,33 GHz.
Das ist klar, dabei wird ja auch die Datei nicht im Ganzen geöffnet.
Bei Textedit oder SubEthaEdit ist es auch performant, nachdem die Datei geladen ist.
 
Zuletzt bearbeitet von einem Moderator:
solche Dateien mache ich in Windows regelmäßig mit UltraEdit auf und bearbeite da Textpassagen oder lösche Stücke raus etc.

Sowas muss es doch für den Mac auch geben ohne minutenlang zu warten? Erstaunt mich jetzt aber schon....
 
elastico schrieb:
solche Dateien mache ich in Windows regelmäßig mit UltraEdit auf und bearbeite da Textpassagen oder lösche Stücke raus etc.

Sowas muss es doch für den Mac auch geben ohne minutenlang zu warten? Erstaunt mich jetzt aber schon....

Es wurden doch schon genug genannt. Ich hab es gerade selbst nochmal mit emacs probiert, war etwas performanter als vi bei 60 MB, aber beide sehr flott auf meinem iBook. Von emacs gibt es eine niedliche Aqua-Version.
 
Zurück
Oben Unten