[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Regular expression



Hallo,

Am Mon, 08 Jan 2007, Christian Brabandt schrieb:
>Gebhard Dettmar schrieb am Montag, den 08. Januar 2007:
>> Wie geht das denn in awk? (werd da nicht schlau aus der Manpage)
>
>Außer kleineren Scripten hab ich noch nie was mit awk gemacht. Nach
>Studium der Manpage sollte folgendes funktionieren:
>
>,----[ cat format.awk ]-
>| { 
>|     if($0~"2006\n")
>|         {
>|         $0=$0 getline
>|         }
>|     print $0
>| }
>`----
>
>Aufruf mit awk -f script.awk <datei>

Komplizierter als nötig ;) Du kannst direkt in der Adresse
selektieren. Du verwendest das leere Muster, d.h. der Block wird auf
jede Zeile angewendet.

====
#!/usr/bin/awk -f
/2006$/ {
    printf $0;
    getline; print;
}
====

Auf der Kommandozeile:

    awk '/2006$/ { printf $0; getline; print; }' DATEI

(wobei man dabei auch gerne die Zeilenumbrüche im Script behalten
darf).

Das wendet den Block nur auf die Zeilen an, auf die das Muster passt.

Das Muster kann auch auf einzelne Felder bezogen werden oder es können
mehrere Bedingungen sein:

    $2 ~ /foo/ { ... }

    $2 == "foo" && ( $5 !~ /bar/ || $6 <= 10 ) { ... }

Achso, mit so einer passenden hash-bang Zeile kann man die
Script-Datei ausführbar zu machen (chmod u+x) und dann ausführen (wie
man es z.B. auch von perl-scripten kennt).

HTH,
-dnh

-- 
program (pro'-gram) [n] A magic spell cast over a computer allowing
it to turn one's input into error messages.
tr.v. To engage in a pastime similar to banging one's head against a
wall, but with fewer opportunities for reward.



Reply to: