Anzeige:
Ergebnis 1 bis 5 von 5

Thema: awk-Problem (mit reg-exp ?!)

  1. #1
    /dev/null
    Gast

    awk-Problem (mit reg-exp ?!)

    Hallo,

    ich stehe hier bei dem folgenden kleinen awk-Script vor einem Raetsel:

    #!/usr/bin/awk -f

    match (FILENAME, /host/) {

    # 1. Version if ($0 ~ /^\|[Entry name|Any|Internal|External]/) {
    # 2. Version if (($0 ~ /^\|[Entry name|Internal|External]/) || ($0 ~ /^\|Any/)) {

    next
    }

    print $0
    }



    Die host-Datei enthaelt die folgenden Zeilen:

    |Avonline |Avonline |1 |1 |2
    |Avonline0800002 |Avonline0800002 |1 |1 |2
    |Avonline0800005 |Avonline0800005 |1 |1 |2



    Waehrend die 2. Version die Zeilen (wie gewuenscht) ausgibt, liefert die erste Variante kein Ergebnis. Allerdings kann ich von der Logik her keinen Unterschied erkennen - wo liegt mein Problem ?!


    TIA

    /dev/null

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ich bin nicht gerade so 100%ig fit in Awk - was genau macht
    match (FILENAME, /host/) {
    ?

    Bei mir gibt das Script übrigens in beiden fällen nichts aus. Oder müsste ich da noch was spezielles machen? (Was tut der FILENAME da genau?)

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    /dev/null
    Gast
    Sorry - haette vielleicht gleich ausfuehrlicher werden sollen.

    Also:

    Die Operation match ueberprueft, ob der erste Parameter (hier die Built-in Variable FILENAME [Name der aktuellen Input-Datei]) den zweiten Parameter als Teilstring enthaelt) - wenn ja wird die Anfangsposition geliefert - sonst 0

    Der Kommandoaufruf lautet also:

    <Name des awk-scripts> host

    dann wird die host-Datei von dem awk-script gesourct


    Hoffe, damit alle Unklarheiten geklaert zu haben -


    /dev/null

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Nee, schon ok. Ich kannte nur FILENAME nicht und dachte das müsse man noch irgendwie füllen.

    Was soll
    # 1. Version if ($0 ~ /^\|[Entry name|Any|Internal|External]/) {
    genau?
    Ich nehme mal an
    ^\|Entry name oder
    ^\|bla oder
    ...

    Das geht nicht mit [ ] - das ist für sog "charakter classes" - d.h. [asdf] matcht a, s, d oder f.

    Awk kann | zwischen normalen Klammern. Also das da:
    if ($0 ~ /^\|(Entry name|Any|Internal|External)/) {

    MfG Peschmä

    P.S. Auch möglich dass was nicht stimmt von dem was ich da erzähle. AWK ist nicht so mein Spezialgebiet
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    /dev/null
    Gast
    Das wars - kaum macht man es richtig - schon funktioniert es !

    Richtig, die Konkatenation der reg-ex muss in awk mit runden Klammern geklammert werden - die eckige Variante war da die falsche Wahl -

    Vielen Dank fuer den Hinweis ...

    /dev/null

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •