2013-04-05 1 views
27

Hat awk eine OR Anweisung d.h den folgenden Ausschnitt gegeben:awk OR-Anweisung

awk '{if ($2=="abc") print "blah"}' 

Ist es möglich, eine OR Aussage so, dass, wenn $2==abc OR def -> print hinzufügen?

Antwort

36

Ja. Es ist logisch ODER || die Sie verwenden können:

awk '{if ($2=="abc" || $2=="def") print "blah" }' 
+0

duh, danke :) – Numpty

2
awk '{if ($2=="abc" || $2=="def") print "blah"}' 
31

Sie würden diesen Code in awk nicht schreiben:

awk '$2=="abc" {print "blah"}' 

und zu:

awk '{if ($2=="abc") print "blah"}' 

Sie diese stattdessen schreiben würde Fügen Sie je nach dem, was Sie letztendlich versuchen, ein "oder" hinzu:

awk '$2~/^(abc|def)$/ {print "blah"}' 

awk '$2=="abc" || $2=="def" {print "blah"}' 

awk ' 
BEGIN{ split("abc def",tmp); for (i in tmp) targets[tmp[i]] } 
$2 in targets {print "blah"} 
' 

Das letzte wäre am besten geeignet, wenn Sie mehrere Zeichenfolgen haben, die Sie übereinstimmen möchten.