PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Field Seperator bei awk:



pombaer
07.09.09, 11:07
Wie kann ich in einem AWK Script den Field Seperator auf 2 Zeichen einstellen wobei eines davon ein Leerzeichen ist und das 2te ein Doppelpunkt?
Gemeint ist entweder " " oder ":" nicht beide zusammen/nebeneinander.

awk 'BEGIN {FS="[ :]" } {print $2}'

funktioniert bei mir nicht.

pombaer
07.09.09, 11:45
Noch eine Frage, sollten nicht folgende Befehle den selben Output ergeben:

awk 'BEGIN {FS=" "} {print $2}'
awk 'BEGIN {FS="[:blank:]"} {print $2}'

Henning14
07.09.09, 11:49
Effektiv willst Du 2 FS haben, statt einem einzigen?
Weiss nicht, ob das geht.

Sonst könnte das noch Wink sein:


The way awk splits an input record into fields is controlled by the field separator, which is a single character or a regular expression.

Specifying how Fields are Separated (http://people.cs.uu.nl/piet/docs/nawk/nawk_23.html)

Sonst musst Du einen Arbeitsschritt dazwischenschieben und die Zeilen mittels geeignetem Suchen/Ersetzen so zu ändern, daß Du dann mit einem einzigen FS auskommst.

Oder Du machst Dir 2 AWK Scripts. Eines hat den FS, das andere den anderen FS.....
*schultazuck*

John W
08.09.09, 13:24
Oder du setzt die Variable FS zwischendurch entsprechend.
Die Skripte unterscheiden sich übrigens: Die zweite Zeile nimmt nicht nur Leerzeichen, sondern auch Tabs (und ähnliches (?)).

Henning14
08.09.09, 15:07
weiss ja nicht, wie wichtig Dein Problem ist ...
Je länger ich nachdenke, desto eher komme ich zu dem Schluss, daß Du den Input erstmal modifizieren musst.
Ich würde die beiden FS durch einen eindeutigen ersetzen umd dann das eigentliche Script auszuführen. 2 verschiedene FS gehen definitiv net. Und ob Du das (die beiden FS) in eine regular Expression fassen kannst, weiss ich net... kann ich mir nicht vorstellen.

@john W:

> setzt die Variable FS zwischendurch entsprechend
Das ginge nur Zeile-für-Zeile, aber es müsste ja innerhalb der Zeile geschehen.
Kann aber auch sein, daß ich mich irre. Vielleicht geht das auch während einer Zeile, aber ich glaube, eher nicht ;-)

Grüsse vom AWK-Junkie

John W
08.09.09, 15:41
Gib ma Code, ich glaub, mit einem Konstrukt wie
a=$0; FS=","; ... könnte man einiges machen.