2013-04-05 13 views
27

Czy awk mają OR oświadczenie tj daną następujący fragment:awk LUB oświadczenie

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

Czy jest możliwe aby dodać oświadczenie OR tak, że jeśli $2==abc OR def -> print?

Odpowiedz

36

Tak. Jest logiczne OR || które można użyć:

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

duh, dziękuję :) – Numpty

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

Nie byłoby napisać ten kod w awk:

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

byś napisać to zamiast:

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

i do dodanie "lub" będzie jednym z nich w zależności od tego, co ostatecznie próbujesz zrobić:

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"} 
' 

Ten ostatni byłby najbardziej odpowiedni, jeśli masz kilka ciągów, które chcesz dopasować.