carriage return bzw. Wagenrücklauf in awk [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

carriage return bzw. Wagenrücklauf in awk [gelöst]

Beitrag von becke » 04.09.2006 14:25:14

Hallo :)

Ich habe eine Textdatei folgenden Formates (vereinfacht):

Code: Alles auswählen

1111
2222
3333
4444
Nun möchte ich mittels awk die Datei folgendermaßen strukturieren:

Code: Alles auswählen

1111222233334444
Ich dachte daran, im awk die Zeilen mit

Code: Alles auswählen

print $1 "\r"
wegzuschreiben, dies scheint aber nicht zu funktionieren, das Format ändert sich hierdurch nicht.

Kann mich mal bitte jemand auf den rechten Weg schubsen?

Es braucht übrigens nicht unbedingt awk zu sein, sollte sich aber problemlos in ein Script enbinden lassen.

Gruß,
Becke
Zuletzt geändert von becke am 04.09.2006 17:36:46, insgesamt 1-mal geändert.

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 04.09.2006 14:35:16

hallo,

cat <irgendwas> | tr -d '\n\r'
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

Beitrag von becke » 04.09.2006 15:45:34

Hallo und Danke,

beim ausprobieren fällt mir auf, das meine Ausgabe genaugenommen eher so aussehen müßte:

Code: Alles auswählen

11112222
33334444
Den "Zeilensprung" würde ich in mein Script als Parameter übergeben. Mit awk schien mir das ganz einfach, da awk ja zeilenweise arbeitet.
Jetzt frage ich mich wie ich wohl eine entsprechende Schleife um deinen Vorschlag herum stricken könnte.
cat arbeitet ja nicht zeilenweise...

Könnte ich wohl noch um einen kleinen "Anschieber" bitten? :)

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 04.09.2006 17:19:34

Das geht sicher mit regex, nur leider bin ich nicht so die regex-prinzessin.

liefert jede ungrade zeile:
awk '(NR+1)%2' <datei>

liefert jede grade zeile:
awk 'NR%2' <datei>

danach einfache beide zusammenpappen ;)
Aber das geht sicher eleganter ... nur keine ahnung wie
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
becke
Beiträge: 365
Registriert: 29.11.2004 11:55:04
Wohnort: Ostwestfalen

Beitrag von becke » 04.09.2006 17:36:29

Danke finupsen,

aber jetzt habe ich meine awk-Lösung.
Anstatt:

Code: Alles auswählen

print $1 "\r"
muß es ein formatiertes "print" sein:

Code: Alles auswählen

printf $1,"\r"
dann geht's :P

Der Zeilensprung wird dann in einer Schleife realisiert.

Gruß,
Becke

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 04.09.2006 17:46:34

ach... geht auch ohne schleife:

awk '(NR+1)%2;NR%2{printf$1,'\n'}' <datei>

printf ... muss man wissen ;)
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Antworten