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

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 17 Apr 2013 16:34:59 +0200 (CEST)

mail(at)adminradio.de wrote:
> mit Hilfe eines AWK-Skriptes möchte ich gern die erste Zeile einer
> CSV-Datei aufräumen, sprich Anführungszeichen und Sternchen entfernen. Das
> hatte ich mir wie folgt gedacht:
>
> BEGIN {}

Wenn der Begin-Block leer ist, kannst Du das auch ganz
weglassen.

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

> 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.)

Außerdem kann man beide Ersetzungen zusammenfassen, und $0
ist auch der Default für das dritte Argument. Also ganz
einfach:

gsub (/["*]/, "")

> # Array anlegen
>
> for ( i=1; i <= NF; i++) {
>
> colname[i] = $i
>
> }

Anstelle dieser for-Schleife kannst Du auch schreiben:

split ($0, colname)

> } else {
> # Hübsche Dinge mit allen anderen Zeilen machen
> }

.. und hier gehört noch eine geschweifte Klammer "}" hin.

> END {}

.. und das ist natürlich auch übeflüssig.

Also nochmal komplett:

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

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG,  Marktplatz 29, 85567 Grafing
Handelsregister:  Amtsgericht Muenchen, HRA 74606, Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsreg.: Amtsgericht München,
HRB 125758, Geschäftsführer:  Maik Bachmann,  Olaf Erb,  Ralf Gebhart
FreeBSD-Dienstleistungen/-Produkte + mehr: http://www.secnetix.de/bsd
I suggested holding a "Python Object Oriented Programming Seminar",
but the acronym was unpopular.
        -- Joseph Strout
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 - 16:35:09 CEST

search this site