Re: [OT] awk: gsub() - ein Zeichen mit einer leeren Zeichenkette ersetzen?

From: <mail(at)adminradio.de>
Date: Wed, 17 Apr 2013 20:25:45 +0200

Am 17.04.13 16:34 schrieb "Oliver Fromme":

> > BEGIN {}
>
>Wenn der Begin-Block leer ist, kannst Du das auch ganz
>weglassen.

Ja, das wusste ich. Habe dort noch vor etwas zu machen und schon
mal als Stub mit angelegt.

>Aber hier fehlt eine geschweifte Klammer "{" für den
>nachfolgenden Block.

Sorry für meine Nachlässigkeit bei der E-Mail, das wusste ich.
 
> > if (NR == 1) {
> >
> > # Aufräumen
> > gsub(/\"/, //, $0) # Tüddelüh mit Nichts ersetzen
> > gsub(/\*/, //, $0) # Sternchen mit Nichts ersetzen
>
>Das zweite Argument für gsub() ist ein String, kein Regex.
>(Die unerwarteten Zahlen kommen daher, weil ein Regex einen
>Boolean-Wert als Ergebnis liefert, d.h. 1 für Match und 0
>für Mismatch.)

Das ist erhellend und erklärt vieles. Danke.

>Außerdem kann man beide Ersetzungen zusammenfassen, und $0
>ist auch der Default für das dritte Argument. Also ganz
>einfach:
>
>gsub (/["*]/, "")

Das habe ich mir schon gedacht, Wollte ich später zusammenfassen
wenn ich das Problem verstanden habe. Außerdem war ich mir bisher
auch nicht sicher, ob ich das * escapen muss. Scheinbar nicht. :)

> > # Array anlegen
> >
> > for ( i=1; i <= NF; i++) {
> >
> > colname[i] = $i
> >
> > }
>
>Anstelle dieser for-Schleife kannst Du auch schreiben:
>
>split ($0, colname)

Klasse.

[...]

>.. und hier gehört noch eine geschweifte Klammer "}" hin.
>
> > END {}
>
>.. und das ist natürlich auch übeflüssig.

Jo.

>Also nochmal komplett:
>
>{
> if (NR == 1) {
> gsub (/["*]/, "")
> split ($0, colname)
> }
> else {
> ...
> }
>}

Sensationell, danke Olli.

-- 
Gruß, Timm
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 17 Apr 2013 - 20:28:38 CEST

search this site