像其他程式設計語言,AWK也提供了大量的運算子。本教學介紹AWK運算子的例子:
AWK支援以下算術運算子:
它是由正(+)符號,其將兩個或多個數位來表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { a = 50; b = 20; print "(a + b) = ", (a + b) }'
在執行上面的程式碼後,得到以下結果:
(a + b) = 70
減法表示( - )符號中減去兩個或兩個以上的數位。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { a = 50; b = 20; print "(a - b) = ", (a - b) }'
在執行上面的程式碼後,得到以下結果:
(a - b) = 30
它是由星號(*)符號相乘的兩個或多個數來表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { a = 50; b = 20; print "(a * b) = ", (a * b) }'
在執行上面的程式碼後,得到以下結果:
(a * b) = 1000
它是由斜線(/)符號,其將兩個或兩個以上的數來表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { a = 50; b = 20; print "(a / b) = ", (a / b) }'
在執行上面的程式碼後,得到以下結果:
(a / b) = 2.5
它由百分號(%)符號其中查詢模除兩個或兩個以上的數表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { a = 50; b = 20; print "(a % b) = ", (a % b) }'
在執行上面的程式碼後,得到以下結果:
(a % b) = 10
它是由++表示。它由1遞增運算元的值這個操作符先遞增運算元的值,然後返回增加後的值。例如在下面的例子中此操作者設定兩個運算元的值,a和b加到11。
awk 'BEGIN { a = 10; b = ++a; printf "a = %d, b = %d\n", a, b }'
在執行上面的程式碼後,得到以下結果:
a = 11, b = 11
它由下式 -- 表示 。運算元減去1,操作符首先遞減運算元的值,然後返回遞減值。例如在下面的例子中此操作者設定兩個運算元中的值,a和b至9。
[jerry]$ awk 'BEGIN { a = 10; b = --a; printf "a = %d, b = %d\n", a, b }'
在執行上面的程式碼後,得到以下結果:
a = 9, b = 9
它是由++表示。它遞增運算元1的值,這個操作符首先將返回運算元的值,並增加它的值。例如範例顯示運算元a值為11以及b的值為10。
[jerry]$ awk 'BEGIN { a = 10; b = a++; printf "a = %d, b = %d\n", a, b }'
在執行上面的程式碼後,得到以下結果:
a = 11, b = 10
它可表示為-- 。運算元減少1,操作符首先將返回運算元的值,再遞減它的值。例如範例顯示的運算元a值為9和b的值為10。
[jerry]$ awk 'BEGIN { a = 10; b = a--; printf "a = %d, b = %d\n", a, b }'
在執行上面的程式碼後,得到以下結果:
a = 9, b = 10
AWK支援以下賦值運算子:
它是由=表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { name = "Jerry"; print "My name is", name }'
在執行上面的程式碼後,得到以下結果:
My name is Jerry
它是由 += 表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { cnt=10; cnt += 10; print "Counter =", cnt }'
在執行上面的程式碼後,得到以下結果:
Counter = 20
在上面的例子中第一個語句將值 10 賦值經變數cnt,下一條語句縮寫操作遞增它的值為10。
它可表示為 -=。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { cnt=100; cnt -= 10; print "Counter =", cnt }'
在執行上面的程式碼後,得到以下結果:
Counter = 90
在上面的例子中第一個語句將值100賦值經變數cnt,在下一語句縮寫操作符遞減10。
它是由* =表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { cnt=10; cnt *= 10; print "Counter =", cnt }'
在執行上面的程式碼後,得到以下結果:
Counter = 100
在上面的例子中第一個語句將值10賦值給變數cnt,接下來一條語句縮寫操作乘以10。
它是由/=表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { cnt=100; cnt /= 5; print "Counter =", cnt }'
在執行上面的程式碼後,得到以下結果:
Counter = 20
在上面的例子中第一個語句將值100賦值到變數cnt,以及在下一語句縮寫運算除法5。
它是由%=表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { cnt=100; cnt %= 8; print "Counter =", cnt }'
在執行上面的程式碼後,得到以下結果:
Counter = 4
它是由^=表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { cnt=2; cnt ^= 4; print "Counter =", cnt }'
在執行上面的程式碼後,得到以下結果:
Counter = 16
上面的例子提高cnt的指數4的值。
它是由** =表示。下面的例子說明了這一點:
[jerry]$ awk 'BEGIN { cnt=2; cnt **= 4; print "Counter =", cnt }'
在執行上面的程式碼後,得到以下結果:
Counter = 16
這個例子也由4提高cnt 的值。
AWK支援以下關係運算子:
它是由==表示。如果兩個運算元相等則返回true,否則返回false。下面的例子說明了這一點:
awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'
在執行上面的程式碼後,得到以下結果:
a == b
它可表示為!=。如果兩個運算元是不平等則返回true,否則返回false。
[jerry]$ awk 'BEGIN { a = 10; b = 20; if (a != b) print "a != b" }'
在執行上面的程式碼後,得到以下結果:
a != b
它是由<表示。如果左側運算元小於右邊的運算元則返回true,否則返回false。
[jerry]$ awk 'BEGIN { a = 10; b = 20; if (a < b) print "a < b" }'
在執行上面的程式碼後,得到以下結果:
a < b
它是由<=表示。如果左側運算元小於或等於右邊的運算元則返回true,否則返回 false。
[jerry]$ awk 'BEGIN { a = 10; b = 10; if (a <= b) print "a <= b" }'
在執行上面的程式碼後,得到以下結果:
a <= b
它是由>表示。如果左側運算元大於右邊的運算元則返回true, 否則返回false。
[jerry]$ awk 'BEGIN { a = 10; b = 20; if (b > a ) print "b > a" }'
在執行上面的程式碼後,得到以下結果:
b > a
它是由>=表示。如果左側運算元大於或等於右邊的運算元則返回true,否則返回false。
[jerry]$ awk 'BEGIN { a = 10; b = 10; if (a >= b) print "a >= b" }'
在執行上面的程式碼後,得到以下結果:
b >= a
AWK支援以下邏輯運算子:
它是由&&表示。下面是邏輯與操作的語法。
expr1 && expr2
它的計算結果為true ,如果這兩個expr1 和 expr2計算為true,否則結果為假。當且僅當expr1 計算為true時expr2才進行計算。例如下面範例檢查給定的單位數位是否為八進位制格式。
[jerry]$ awk 'BEGIN {num = 5; if (num >= 0 && num <= 7) printf "%d is in octal format\n", num }'
在執行上面的程式碼後,得到以下結果:
5 is in octal format
它是由||表示。下面是邏輯或運算子的語法。
expr1 || expr2
它的計算結果為true,如果任一expr1或expr2為true,否則結果為false。當且僅當expr1的計算結果為false,expr2才進行計算。下面簡單的例子說明了這一點。
[jerry]$ awk 'BEGIN {ch = "\n"; if (ch == " " || ch == "\t" || ch == "\n") print "Current character is whitespace." }'
在執行上面的程式碼後,得到以下結果:
Current character is whitespace.
它是由感嘆號表示(!)。下面是相同的語法。
! expr1
它返回expr1的邏輯補。如果expr1的計算結果為true,則返回0;否則返回1。例如下面的範例檢查字串是否為空。
[jerry]$ awk 'BEGIN { name = ""; if (! length(name)) print "name is empty string." }'
在執行上面的程式碼後,得到以下結果:
name is empty string.
我們可以使用三元操作輕鬆實現條件表示式。下面是相同的語法:
condition expression ? statement1 : statement2
當條件表示式返回true,statement1被執行,否則statement2被執行。比如下面的例子顯示查詢最大數。
[jerry]$ awk 'BEGIN { a = 10; b = 20; (a > b) ? max = a : max = b; print "Max =", max}'
在執行上面的程式碼後,得到以下結果:
Max = 20
AWK支援以下一元運算子:
它是由+表示。它通過+1乘以單運算元。
[jerry]$ awk 'BEGIN { a = -10; a = +a; print "a =", a }'
在執行上面的程式碼後,得到以下結果:
a = -10
它可表示為 - 。它通過-1乘以單個運算元。
[jerry]$ awk 'BEGIN { a = -10; a = -a; print "a =", a }'
在執行上面的程式碼後,得到以下結果:
a = 10
本教學介紹了兩種形式的指數的操作符提供的例子:
它是一個指數運算子,它提高運算元的值。比如下面的例子提高10的2次冪的值。
[jerry]$ awk 'BEGIN { a = 10; a = a ^ 2; print "a =", a }'
在執行上面的程式碼後,得到以下結果:
a = 100
它是一個指數運算子,它提高運算元的值。比如下面的例子提高10的2次冪的值。
[jerry]$ awk 'BEGIN { a = 10; a = a ** 2; print "a =", a }'
在執行上面的程式碼後,得到以下結果:
a = 100
空格是字串連線運算子,它合併兩個字串。下面簡單的例子說明了這一點:
[jerry]$ awk 'BEGIN { str1="Hello, "; str2="World"; str3 = str1 str2; print str3 }'
在執行上面的程式碼後,得到以下結果:
Hello, World
它是通過in表示。在存取陣列元素時使用。下面簡單的例子列印使用該操作的陣列元素。
[jerry]$ awk 'BEGIN { arr[0] = 1; arr[1] = 2; arr[2] = 3; for (i in arr) printf "arr[%d] = %d\n", i, arr[i] }'
在執行上面的程式碼後,得到以下結果:
arr[0] = 1 arr[1] = 2 arr[2] = 3
本教學介紹了兩種形式的正規表示式運算子的例子:
它被表示為?。它會查詢包含匹配字串的欄位。比如下面的例子列印行,其中包含的模式9。
[jerry]$ awk '$0 ~ 9' marks.txt
在執行上面的程式碼後,得到以下結果:
2) Rahul Maths 90 5) Hari History 89
它表示為 !~。它看起來不包含匹配字串的欄位。例如下面的例子將列印不含有模式9的行。
[jerry]$ awk '$0 !~ 9' marks.txt
在執行上面的程式碼後,得到以下結果:
1) Amit Physics 80 3) Shyam Biology 87 4) Kedar English 85