Eigentlich Beispiel # 2
verwendet eine Regex wegen dieser Syntax
Was in Ihrem Beispiel bedeutet, dass, wenn der literale Text Mary
nirgendwo in der ganzen Zeile gefunden wird (
), führen Sie awk code aus. == "Mary"
Während Mary
einen direkten Vergleich zwischen dem Literaltext und dem Feld # 1 (
tolower() ~ /mary/
) vornimmt.
Schließlich verwendet erneut das Feld "regex-Übereinstimmung" für Feld # 1, was bedeutet, dass
mary
den Text %code% (ignore-case) hat und dann den Rest des awk-Codes ausführt.
In awk ist
die gesamte Zeile der Argumente, während nur das erste Argument in einer Liste von Argumenten ist, die durch Leerzeichen getrennt sind. Also, wenn ich "Mary hatte ein kleines Lamm" durch awk,
%code%
ist "Mary", aber %code% ist "Mary hatte ein kleines Lamm". Die zweite Zeile versucht, die Teilzeichenfolge "Mary" in der ganzen Zeile zu finden, die awk zugewiesen ist.
Aus der Beschreibung in Ihrem Link (Hervorhebung von mir):
Der Ausdruck ist im Allgemeinen eines der Felder oder das Ergebnis von eine Operation auf einem der Felder. Zum Beispiel das folgende AWK Filterregeln zeigen, bzw. , wie das erste Feld verglichen wird "Mary" ohne Berücksichtigung der Groß- / Kleinschreibung, wie man alle Datensätze abgleicht, die das tun nicht enthalten "Mary" und wie man zuerst einen genauen Vergleich der macht Feld gegen "Mary":
Also aufschlüsseln:
Erster:
%Vor% Da es das erste Feld vergleicht, verwendet es
wie alle Datensätze übereinstimmen, die "Mary" nicht enthalten,
Da alle Datensätze verglichen werden, wird
Dritter
und wie man einen genauen Vergleich des ersten Feldes mit "Mary" macht:
Vergleichen Sie das erste Feld erneut, also verwendet es %code% .