1 tolower($1) ~ /mary/ { print "CI Record: " $0; }
2 $0 !~ /Mary/ { print "Not Mary: " $0; }
3 $1 == "Mary" { print "Mary Record: " $0; }
Dlaczego 1
i 3
porównać $1
i 2
użyciu $0
?
1 tolower($1) ~ /mary/ { print "CI Record: " $0; }
2 $0 !~ /Mary/ { print "Not Mary: " $0; }
3 $1 == "Mary" { print "Mary Record: " $0; }
Dlaczego 1
i 3
porównać $1
i 2
użyciu $0
?
Właściwie przykład # 2
używa regex powodu tej składni
/regex/
co oznacza, że w swoim przykładzie, że jeśli tekst dosłowny Mary
nie jest nigdzie w całej linii ($0
), a następnie wykonać kod awk.
Podczas gdy $1 == "Mary"
dokonuje bezpośredniego porównania literalnego tekstu Mary
i pola nr 1 ($1
).
Wreszcie tolower($1) ~ /mary/
ponownym użyciem ignre-case regex mecz na polu # 1, a to oznacza, że jeśli $1
ma tekst mary
(ignorować przypadków), a następnie wykonać resztę kodu awk.
W awk, $0
to cała linia argumentów, natomiast $1
to tylko pierwszy argument na liście argumentów oddzielonych spacjami. Więc jeśli wstawię "Mary ma małą jagnię" przez awk, $1
to "Mary", ale $0
to "Mary miała małą owieczkę". Druga linia próbuje znaleźć podciąg "Mary" w całej linii podanej do awk.
Z opisu w linku (kopalnia nacisk):
Wyrażenie jest na ogół albo jedno z pól lub w wyniku operację na jednym z pól.Na przykład, następujące AWK reguły filtrowania pokazać, odpowiednio, jak porównywać pierwsze pole do „Maria” w przypadku niewrażliwe mody, jak dopasować wszystkie rekordy że zrobić nie zawierają „Mary” i jak to zrobić dokładne porównanie dziedziniepierwszy przeciw „Mary”:
zatem jego rozbijania:
pierwszy z nich:
how to compare the first field to “mary” in a case-insensitive fashion
Bo to porównując pierwsze pole, używa $1
jak dopasować wszystkie rekordy, które nie zawierają „Mary”
Ponieważ jest to porównując wszystkie rekordy, używa $0
Trzeci
i jak to zrobić dokładne porównanie pierwszym polu przeciw „Maryja”:
ponownie Porównując pierwsze pole, więc używa $1
.
Nie powinieneś nawet rozważać używania awk, dopóki nie będziesz w stanie odpowiedzieć na te pytania z łatwością, ponieważ są one absolutnie podstawowe. To tak, jakby pokazać nam problem z matematyką i zapytać, co znaczy "+". Zdobądź książkę Efektywne programowanie awk, wydanie trzecie według Arnolda Robbinsa. –
Uzgodnione z @EdMorton. Przy okazji głosuję za ponownym otwarciem tego pytania: jego tytuł uruchamia wiele wizyt, a właściwa odpowiedź z dobrym wyjaśnieniem może dać jasność na ten temat. – fedorqui