Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  UNIX
  Formatierung eines Textfiles

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Formatierung eines Textfiles (1326 mal gelesen)
Dominik.Mueller
Mitglied
Berechnungsingenieur Crash / Safety


Sehen Sie sich das Profil von Dominik.Mueller an!   Senden Sie eine Private Message an Dominik.Mueller  Schreiben Sie einen Gästebucheintrag für Dominik.Mueller

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Dominik.Mueller an!   Senden Sie eine Private Message an Dominik.Mueller  Schreiben Sie einen Gästebucheintrag für Dominik.Mueller

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlausJ an!   Senden Sie eine Private Message an KlausJ  Schreiben Sie einen Gästebucheintrag für KlausJ

Beiträge: 1336
Registriert: 17.03.2003

AIX 6.2
Windows XP

erstellt am: 06. Nov. 2007 11:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

Nur als Idee :
Du könntest die Zeilen mit awk in ein zweidimensinales Feld einlesen und dann Reihe/Spalte vertauscht ausgeben.

------------------
Nichts ändern ist langweilig !!

Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tobul
Mitglied
Physiker


Sehen Sie sich das Profil von tobul an!   Senden Sie eine Private Message an tobul  Schreiben Sie einen Gästebucheintrag für tobul

Beiträge: 191
Registriert: 06.05.2003

erstellt am: 06. Nov. 2007 11:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von KlausJ an!   Senden Sie eine Private Message an KlausJ  Schreiben Sie einen Gästebucheintrag für KlausJ

Beiträge: 1336
Registriert: 17.03.2003

AIX 6.2
Windows XP

erstellt am: 06. Nov. 2007 13:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

Hi Tubol,
Ich hatte keine Zeit es auszuarbeiten, ich habe fast eine 3/4 Stunde für die paar Zeilen gebraucht. 

------------------
Nichts ändern ist langweilig !!

Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dominik.Mueller
Mitglied
Berechnungsingenieur Crash / Safety


Sehen Sie sich das Profil von Dominik.Mueller an!   Senden Sie eine Private Message an Dominik.Mueller  Schreiben Sie einen Gästebucheintrag für Dominik.Mueller

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlausJ an!   Senden Sie eine Private Message an KlausJ  Schreiben Sie einen Gästebucheintrag für KlausJ

Beiträge: 1336
Registriert: 17.03.2003

AIX 6.2
Windows XP

erstellt am: 06. Nov. 2007 13:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

Hallo Dominik,
Du mußt Dir noch die Maximale Anzahl der Spalten und Reihen merken und dann entsrechend ausgeben !

------------------
Nichts ändern ist langweilig !!

Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tobul
Mitglied
Physiker


Sehen Sie sich das Profil von tobul an!   Senden Sie eine Private Message an tobul  Schreiben Sie einen Gästebucheintrag für tobul

Beiträge: 191
Registriert: 06.05.2003

erstellt am: 06. Nov. 2007 13:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich


bsp.txt


ergebnis.txt

 
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



Sehen Sie sich das Profil von KlausJ an!   Senden Sie eine Private Message an KlausJ  Schreiben Sie einen Gästebucheintrag für KlausJ

Beiträge: 1336
Registriert: 17.03.2003

AIX 6.2
Windows XP

erstellt am: 06. Nov. 2007 14:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

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 > ausgabe

Hast 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


Sehen Sie sich das Profil von Dominik.Mueller an!   Senden Sie eine Private Message an Dominik.Mueller  Schreiben Sie einen Gästebucheintrag für Dominik.Mueller

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von tobul an!   Senden Sie eine Private Message an tobul  Schreiben Sie einen Gästebucheintrag für tobul

Beiträge: 191
Registriert: 06.05.2003

erstellt am: 06. Nov. 2007 14:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Dominik.Mueller an!   Senden Sie eine Private Message an Dominik.Mueller  Schreiben Sie einen Gästebucheintrag für Dominik.Mueller

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank an euch beiden für die Hilfe.
Der Rest sollte dann klappen.

------------------
Viele Grüße

Dominik

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tobul
Mitglied
Physiker


Sehen Sie sich das Profil von tobul an!   Senden Sie eine Private Message an tobul  Schreiben Sie einen Gästebucheintrag für tobul

Beiträge: 191
Registriert: 06.05.2003

erstellt am: 06. Nov. 2007 14:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von KlausJ an!   Senden Sie eine Private Message an KlausJ  Schreiben Sie einen Gästebucheintrag für KlausJ

Beiträge: 1336
Registriert: 17.03.2003

AIX 6.2
Windows XP

erstellt am: 06. Nov. 2007 15:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dominik.Mueller 10 Unities + Antwort hilfreich

Und am Ende immer ein \n !!

------------------
Nichts ändern ist langweilig !!

Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz