AWK-Befehl über 2 Zeilen Text

C

Chib

Jungspund
Hallo

Ich muss den Folgenden Text :

Code:
 Test in Zustand new 
    1111    2000-01-30 06:15:13

in

Code:
Test in Zustand new     1111    2000-01-30 06:15:13

umwandeln. Von diesen Zeilen gibt es tausende. Dies sollte natürlich mit awk gehen. Doch irgenwie will es nicht so recht klappen, da der Text auf 2 Zeilen verteilt ist. Ich versuche durch awk jedes einzelne Wort in eine Spalte zu legen und diese dann mittels printf befehl wieder auszugeben in sinn von s% s% s% usw..

könnt ihr mir da weiterhelfen?
 
hab zwar kene ahnung von awk(auch nich was das is) aba ich nehm mal an es ist in etwa einen programmiersprache. sind diese bedingungen erfüllt würder ich folgendes machen:
2 zeilen in einen String einlesen und dort dann nach dem enter suchen lassen(bei php \n) und dies durch nix("") ersetzen.
dann gibst du den string mit printf aus
mfg element
 
ich nehme folgendes txt file format an:

foo.txt:
foobar
Test in Zustand new
1111 2000-01-30 06.15.13
barfus
Test in Zustand new
2222 2000-01-31 06.13.11
foofo

dann nehmen wir mal sed:
sed -n '/^Test.*new$/{h;n;H;x;s/\n//;p}' foo.txt

stephan@unimatrix ~ $ sed -n '/new$/{h;n;H;x;s/\n//;p}' foo.txt
Test in Zustand new 1111 2000-01-30 06.15.13
Test in Zustand new 2222 2000-01-31 06.13.11

Geht! Heureka!
 
@smg: BIG thx!

es hat geklappt ;)
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

so sry für doppelpost:

Zwar funktioniert der Script von smg perfekt. Doch nun hab ich festgestellt das es noch andere Formen gibt vom meiner Daten:

Code:
 Test in Zustand new 
    1111    2000-01-30 06:15:13
    1111    2000-01-30 06:15:13
    1111    2000-01-30 06:15:13
    1111    2000-01-30 06:15:13

Nun sollten alle darunter kommende Einträge oben bei Zustand new eingeschoben werden.

so sollte es dann aussehen:
Code:
Test in Zustand new   1111    2000-01-30 06:15:13  1111    2000-01-30 06:15:13  1111   2000-01-30 06:15:13 1111    2000-01-30 06:15:13
 
Zuletzt bearbeitet:
Schade, bei mir hatte es geklappt, was macht er?
Kannst du mal deine txt datei Ausschnittsweise wo hochladen?
Eventuell bei nopaste.info oder ähnlichen nopaste Diensten?
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Code:
Test in Zustand new
    1111 2000-01-30 06.15.13
    2222 2000-01-31 06.13.11
Test in Zustand new
    1111 2000-01-30 06.15.13
    2222 2000-01-31 06.13.11
    1111 2000-01-30 06.15.13
    2222 2000-01-31 06.13.11
Test in Zustand new
    1111 2000-01-30 06.15.13
    2222 2000-01-31 06.13.11
    2222 2000-01-31 06.13.11
Test in Zustand new
    1111 2000-01-30 06.15.13
    1111 2000-01-30 06.15.13
    2222 2000-01-31 06.13.11
    2222 2000-01-31 06.13.11
    2222 2000-01-31 06.13.11
    2222 2000-01-31 06.13.11

sed '/^Test.*new$/,/^Test.*new$/{:L;N;s/\n//;bL;}' foo.txt | sed 's/Test/\n&/g;'

Test in Zustand new 1111 2000-01-30 06.15.13 2222 2000-01-31 06.13.11
Test in Zustand new 1111 2000-01-30 06.15.13 2222 2000-01-31 06.13.11 1111 2000-01-30 06.15.13 2222 2000-01-31 06.13.11
Test in Zustand new 1111 2000-01-30 06.15.13 2222 2000-01-31 06.13.11 2222 2000-01-31 06.13.11
Test in Zustand new 1111 2000-01-30 06.15.13 1111 2000-01-30 06.15.13 2222 2000-01-31 06.13.11 2222 2000-01-31 06.13.11 2222 2000-01-31 06.13.11 2222 2000-01-31 06.13.11
 
Zuletzt bearbeitet:
ich werde es morgen mal etwas hochladen...heute muss ich weg

aber ich bedanke mich herzlich bei dir smg für die Mühe ! :)
 
Nur der Vollständigkeit halber, damit auch nochmal etwas über awk vorkommt
Code:
BEGIN { myline="" }

/^Test/		{ printf "%s\n", myline; myline=$0 }
/\ *[0-9]+/	{ myline=myline $0 }

END { printf myline }
Als script.awk speichern und mit awk -f script.awk data.txt aufrufen, wobei data.txt die zu formatierenden Daten enthält.
Ist bestimmt nicht perfekt, tut es aber schon ganz gut.
Danke für die nette Anregung, sich mal wieder mit einem solchen Klassiker zu beschäftigen!
 
die verison von smg hat geklappt....es lag daran das ich eine late verison von sed verwendete

das problem ist nun definitiv gelöst
 

Ähnliche Themen

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Festplatte stirbt, dd funktioniert nicht

Modulfehler?

Ubuntu X / dbus problem

Festplatte friert ein nach suspend/resume

Zurück
Oben