PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk-Problem (mit reg-exp ?!)



/dev/null
10-05-2005, 10:43
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

peschmae
10-05-2005, 17:48
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ä

/dev/null
11-05-2005, 09:14
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

peschmae
11-05-2005, 16:24
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 ;)

/dev/null
12-05-2005, 09:17
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