awk作为文本处理优秀工具之一,它有拥有丰富的运算符。awk运算符.表达式及功能与c语言基本相同。下面我们一起归纳总结一下所有运算符。
一.字段引用
$ 字段引用 空格 字符串连接符 |
# gawk -F"[ :]" '{ print $1 }' list.txt 同时使用两个分隔符 |
二.字段引用
x*y | x乘y | x+y | x加y |
x%y | 计算x/y的余数(求模) | x-y | x减y |
x/y | x除y | x=y | 将y的值赋给x |
x**y | x的y次幂 | x+=y | 将x+y的值赋给x |
x^y | x的y次幂 | x-=y | 将x-y的值赋给x |
++y | y加1后使用y(前置加) | x*=y | x*y的值赋给x |
y++ | 使用y值后加1(后缀加) | x^=y | 将x^y的值赋给x |
--y | y减1后使用y(前置减) | x/=y | 将x/y的值赋给x |
y-- | 使用后y减1(后缀减) | x%=y | 将x%y的值赋给x |
-y | 负y;也称一目减 | x**=y | 将x**y的值赋给x |
二.awk赋值运算符
awk /^$/{print x = x + 1} example 统计出空行数
awk /^$/{print x += 1} example 使代码更简洁
awk /^$/{print x++} example 使代码更简洁
= += -= *= /= %= ^= **= |
a+=5; 等价于:a=a+5; 其它同类 |
AWK字段间做除法 #cat file 500,300 200,100 取第一个字段,然后第一行除以第二行,计算出百分比,怎么写? #awk -F"," '{print $1}' file | awk 'BEGIN{FS="\n";RS="";OFS"\t"};{print $1/$2*100"%"}' 250% |
#awk '{tot+=$2}{print $0} END{print "total point: "tot}' example # ls -l | awk '/^[^d]/ {print $9"\t"$5} {tot+=$5} END {print "KB:" tot} |
2.逻辑运算符
|| 逻辑或 && 逻辑与 |
$ awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' 0 1 |
3.awk正则运算符
~ ~! 匹配正则表达式和不匹配正则表达式 |
$ awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' ok |
#awk '$3 ~ /^d/ {print "ok"}' example |
4.awk关系运算符
< <= > >= != == 关系运算符 |
如:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串 就会转换为字符串比较。两个都为数字 才转为数值比较。字符串按ascii码顺序比较。 $ awk 'BEGIN{a="11";if(a >= 9){print "ok";}}' $ awk 'BEGIN{a=11;if(a >= 9){print "ok";}}' ok |
#awk '$2 > 10 {print "ok"}' example |
查/etc/passwd中第3栏小于10的数据,且仅列账号与第3栏: # awk -F":" '$3<10 {print $1 "\t " $3}' /etc/passwd # awk 'BEGIN{FS=":"}$3<10 {print $1 "\t " $3}' /etc/passwd |
5.算术运算符
+ - 加,减 * / & 乘,除与求余 + - ! 一元加,减和逻辑非 ^ *** 求幂 ++ -- 增加或减少,作为前缀或后缀 |
说明,所有用作算术运算符 进行操作,操作数自动转为数值,所有非数值都变为0。 $ awk 'BEGIN{a="b";print a++,++a;}' 0 2 |
6.?: C条件表达式
?: |
$ awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' ok |
7.in 数组中是否存在某键值
in运算符, i判断数组中是否存在该键值。 |
$ awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' 0 $ awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' 1 |