Autor
|
Thema: Formatierung eines Textfiles (1326 mal gelesen)
|
Dominik.Mueller Mitglied Berechnungsingenieur Crash / Safety
Beiträge: 864 Registriert: 17.03.2005 privat: Intel Core 2 Duo E6600 PNY Quadro FX 1500 MSI P965 Platinum 4 GB RAM DualChannel (MDT) 2 x 400 GB Samsung Spinpoint RAID0 Spaceball 5000 USB Software: ABAQUS 6.7 Hyperworks 8.0SR1 ANSA 12.1.1 Windows XP Prof. 32/64 bit Redhat Enterprise 5
|
erstellt am: 05. Nov. 2007 18:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Textfile mit folgendem Inhalt vorliegen: 1 2 3 4 5 6 7 8 9 Als Ergebnis möchte ich folgendes in eine neue Datei schreiben: 1 4 7 2 5 8 3 6 9 Prinzipiell kann ich dieses Format erreichen, indem ich mir aus den drei Zahlenblöcken manuell drei einzelne Dateien erzeuge und diese über den paste-Befehl in eine neue Datei umlenke. z.B.: paste x y z > xyz Gibt es eine Möglichkeit, dieses manuelle Vorgehen (Trennung der einzelnen Zahlenblöcke) zu automatisieren?
------------------ Viele Grüße Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dominik.Mueller Mitglied Berechnungsingenieur Crash / Safety
Beiträge: 864 Registriert: 17.03.2005 privat: Intel Core 2 Duo E6600 PNY Quadro FX 1500 MSI P965 Platinum 4 GB RAM DualChannel (MDT) 2 x 400 GB Samsung Spinpoint RAID0 Spaceball 5000 USB Software: ABAQUS 6.7 Hyperworks 8.0SR1 ANSA 12.1.1 Windows XP Prof. 32/64 bit Redhat Enterprise 5
|
erstellt am: 06. Nov. 2007 09:28 <-- editieren / zitieren --> Unities abgeben:
Hallo, ein kleiner Nachtrag von mir. Ich habe gestern versucht, mit einem awk-Script das ganze zu "automatisieren". Das Vorgehen läuft jetzt folgendermaßen ab. Zunächst wird aus dem Ausgangfile eine Datei erzeugt, bei dem die einzelnen Zeilen nummeriert sind. Der Anwender muss nun sich nun die Anfangs- und Endzeile der drei einzelnen Zahlenblöcke notieren. Das Script generiert dann nach Eingabe der drei Anfangs- und Endzeilennummern drei Dateien, welche über den paste-Befehl wieder zusammengefügt werden. Vielleicht kennt jemand eine Lösung, wie ich awk dazu anhalten kann, die drei Zahlenblöcke automatisch zu erkennen und diese als einzelne Dateien herauszuschreiben. ------------------ Viele Grüße Dominik [Diese Nachricht wurde von Dominik.Mueller am 06. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlausJ Moderator
Beiträge: 1336 Registriert: 17.03.2003 AIX 6.2 Windows XP
|
erstellt am: 06. Nov. 2007 11:02 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
|
tobul Mitglied Physiker
Beiträge: 191 Registriert: 06.05.2003
|
erstellt am: 06. Nov. 2007 11:51 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
Hallo! awk wollte ich auch vorschlagen. Mit den arrays von Klaus gehts ja wunderbar, z.B.: awk 'BEGIN {i=1; j=1} /^$/{k=i; i=1; j++} /.+/{array[i,j]=$0; i++} END {for (m=1; m<k; m++) { for (n=1; n<=j; n++) printf "%s ", array[m,n] print } } ' $1 Alles klar? salu' tobul
[Diese Nachricht wurde von tobul am 06. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlausJ Moderator
Beiträge: 1336 Registriert: 17.03.2003 AIX 6.2 Windows XP
|
erstellt am: 06. Nov. 2007 13:18 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
|
Dominik.Mueller Mitglied Berechnungsingenieur Crash / Safety
Beiträge: 864 Registriert: 17.03.2005 privat: Intel Core 2 Duo E6600 PNY Quadro FX 1500 MSI P965 Platinum 4 GB RAM DualChannel (MDT) 2 x 400 GB Samsung Spinpoint RAID0 Spaceball 5000 USB Software: ABAQUS 6.7 Hyperworks 8.0SR1 ANSA 12.1.1 Windows XP Prof. 32/64 bit Redhat Enterprise 5
|
erstellt am: 06. Nov. 2007 13:19 <-- editieren / zitieren --> Unities abgeben:
Hallo ihr beiden, schonmal Danke für die Tipps. @tobul So weit ich dein Script verstehe, wird die Zeilenform in eine Spaltenform transponiert. Die Ausgabe würde dann folgendes beinhalten: 1 2 3 4 5 6 7 8 9 Gewünscht wird jedoch die Form : 1 4 7 2 5 8 3 6 9 Mein Problem besteht darin, dass awk
1. Die Trennung zwischen den Zahlenblöcken erkennen muss (Trennung sei gegeben durch ein Sonderzeichen wie ( oder Leerzeile) 2. Die einzelnen Blöcke nach obigem Schema in eine neue Datei schreibt
------------------ Viele Grüße Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlausJ Moderator
Beiträge: 1336 Registriert: 17.03.2003 AIX 6.2 Windows XP
|
erstellt am: 06. Nov. 2007 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
|
tobul Mitglied Physiker
Beiträge: 191 Registriert: 06.05.2003
|
erstellt am: 06. Nov. 2007 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
Hallo Dominik! Probieren geht über studieren - mein script erzeugt die gewünschte Form (ich habs getestet, ich kann einen Screenshot machen ) Das "print" in der 4t-letzten Zeile macht den Zeilenvorschub! und durch die Schleifen über das array wird wie gewünscht "umsortiert". (Trennung der Blöcke wird über Leerzeile erkannt, ließe sich aber leicht ändern) Probiers aus... salu' tobul (Beispiel als Anhänge: mein-obiges-programm bsp.txt > ergebnis.txt )
[Diese Nachricht wurde von tobul am 06. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlausJ Moderator
Beiträge: 1336 Registriert: 17.03.2003 AIX 6.2 Windows XP
|
erstellt am: 06. Nov. 2007 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
Ich habe jetzt gerade nochmal Zeit gehabt : Es funktioniert, weil j auf dem letzten Stand stehen bleibt. Das ergebnis kannst Du doch in eine neue Datei pipen : awk BEGIN {} // {}... END{} liste > ausgabeHast Du das awk Script von tobul schon ausprobiert ??? ------------------ Nichts ändern ist langweilig !! Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dominik.Mueller Mitglied Berechnungsingenieur Crash / Safety
Beiträge: 864 Registriert: 17.03.2005 privat: Intel Core 2 Duo E6600 PNY Quadro FX 1500 MSI P965 Platinum 4 GB RAM DualChannel (MDT) 2 x 400 GB Samsung Spinpoint RAID0 Spaceball 5000 USB Software: ABAQUS 6.7 Hyperworks 8.0SR1 ANSA 12.1.1 Windows XP Prof. 32/64 bit Redhat Enterprise 5
|
erstellt am: 06. Nov. 2007 14:08 <-- editieren / zitieren --> Unities abgeben:
Ich muss mich entschuldigen, dass Script von tobul macht doch genau das was es soll. Schonmal 10 U's hierfür. Wenn Ihr mir noch bei folgendem helfen könnt, bin ich wunschlos glücklich. Da die einzelnen Zahlenwerte nicht immer die gleiche Anzahl von Ziffern aufweisen, kommt teilweise folgendes Ergebnis heraus: 2.294677 -0.099019408 2.1216967 2.304244 -0.099059612 2.1191337 2.2647479 -0.0619739 2.1297164 2.2956266 -0.10069103 2.1214426 2.3041995 -0.061896935 2.1191454 2.3032899 -0.10071945 2.1193893 2.2915514 -0.10211579 2.1225345 2.2638128 -0.060307547 2.129967 2.267868 -0.058890626 2.1288803 2.3032594-0.058830627 2.1193972 Kann man die Formatierung der Spalten noch irgendwie optimieren? ------------------ Viele Grüße Dominik [Diese Nachricht wurde von Dominik.Mueller am 06. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobul Mitglied Physiker
Beiträge: 191 Registriert: 06.05.2003
|
erstellt am: 06. Nov. 2007 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
Hallo! Du könntest mit der Formatangabe vom printf experimentieren: Momentan steht es auf Zeichenkette: %s Du kannst aber auch andere (Zahlen-)Formate verwenden und dabei ggf. eine Feldbreite und/oder Anzahl Nachkommastellen angeben. salu' tobul
[Diese Nachricht wurde von tobul am 06. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dominik.Mueller Mitglied Berechnungsingenieur Crash / Safety
Beiträge: 864 Registriert: 17.03.2005 privat: Intel Core 2 Duo E6600 PNY Quadro FX 1500 MSI P965 Platinum 4 GB RAM DualChannel (MDT) 2 x 400 GB Samsung Spinpoint RAID0 Spaceball 5000 USB Software: ABAQUS 6.7 Hyperworks 8.0SR1 ANSA 12.1.1 Windows XP Prof. 32/64 bit Redhat Enterprise 5
|
erstellt am: 06. Nov. 2007 14:33 <-- editieren / zitieren --> Unities abgeben:
|
tobul Mitglied Physiker
Beiträge: 191 Registriert: 06.05.2003
|
erstellt am: 06. Nov. 2007 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
Hallo! Alternativ noch ne spontane Idee zum Formatieren (ich weiß ja nicht, wie es genau aussehen soll bzw. für was es gut sein soll): Anstelle des Leerzeichens könntest Du die Spalten ja auch mit einem tab trennen (Beim printf "%s\t" anstelle von "%s ")... salu' tobul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlausJ Moderator
Beiträge: 1336 Registriert: 17.03.2003 AIX 6.2 Windows XP
|
erstellt am: 06. Nov. 2007 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für Dominik.Mueller
|