Datei "drehen"

Ein Schnellschuss mit perl:

Code:
perl -nae '@{$a[$.]}=@F; END{for($j=0; $j<=$#{@a[1]}; $j++){for($i=1; $i<=$#a; $i++){print $a[$i][$j]} print "\n"}}' file

Gruss, Xanti
 
Zuletzt bearbeitet:
Ganz schön mies von dir Xanti, jetzt wollte ich gerade anfangen.....:D
 
Vielen Dank.
Dieses Skript läuft auch deutlich schneller als das Skript, das ich irgendwo im Netz dazu gefunden habe (transform-pl), nämich 11 Minuten statt 55 Minuten bei einer 500MB Datei.
Allerdings ist es auch deutlich langsamer, als mein Shell-Skript, das brauchte nur 3 Minuten. Ich habe da nur das Problem, wenn sehr viele Zeilen da sind, das muss ich noch lösen.... Es hat auch den Vorteil, das ich verstehe, wie es funktioniert (ich habe schon lange genug gebraucht, Dein Skript davon zu überzeugen, dass zwischen die Felder auch Tabstopps sollen)
Vielleicht kannst Du Deines auch noch optimieren...
Wie gesagt, vielen Dank und schöne Grüsse,
Stephan
 
Hallo
Ich lese diesen Thread auch etwas zu spät, da ich gestern nicht anwesend war.
Der Perleinzeiler ist schon ok, aber das Performanceproblem besteht nunmal in der größe des Arrays.
Du musst natürlich erst die gesamten Zeilen einlesen, um die Spalten zu haben.
Das geht natürlich auch mit Shellmitteln, jedoch auch da kannst du die Ausgabe erst beginnen, nachdem du alles gesammelt hast.
Die Shell kennt auch Array!
Für die Textverarbeitung ist aber Perl das ultimative Werkzeug.

Unabhängig davon zu deinem Problem mit der Argumentenzahl:
Es gibt dafür xargs

Gruß Wolfgang
 
Hallo Wolfgang,
ich muss Dir wiedersprechen: ich brauche kein grosses Array aufzubauen. Wie oben beschrieben, lese ich Zeilen einzeln aus und ersetze die TABs durch Newlines. Später mache ich einen Paste-Befehl und fertig ist das ganze viel schneller als mit dem Array. Klingt elegant, ich bekommen nur ein Problem mit vielen Zeilen, aber kein Problem mit etlichen Spalten....
Grüsse,
Stephan

p.s. xargs muss ich mir mal genauer anschauen. Könnte ich hiermit auch einen Befehel für 300000 Dateien ausführen lassen?
 
Du nimmst zwar kein großes Array, aber dafür produzierst du tausende Dateien.

Du kannst auch mit Perl, ein Hash oder Array an eine Datei binden, das wäre dann nur eine Datei.

Zu xargs:
Schau dir die Manpage an, und besonders die Option -n
Gruß Wolfgang
 
vielendank vorerst... ich melde mich wieder, wenn ich weiterkomme. Ein schönes WE wünsche ich, meines fängt jetzt an!
 

Ähnliche Themen

.cfg Datei Analysieren und Zeilen Stellenweise abändern

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

CSV-Datei mit einem Bash-Script erstellen

Server's Power

Problem mit Apache2 + MySQL Server

Zurück
Oben