位置:首頁 > 高級語言 > Awk教學 > AWK運算符

AWK運算符

像其他編程語言,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

遞增和遞減運算符

AWK支持下增量和減量運算符:

前遞增

它是由++表示。它由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