Awk 变量以字母开头,后续字符可以是数字、字母、或下划线。关键字不能用作 awk 变量。awk 变量可以直接使用而不需事先声明。 如果要初始化变量,最好在BEGIN 区域内做,它只会执行一次。Awk 中没有数据类型的概念,一个 awk 变量是 number 还是 string 取决于该变量所处的上下文。
实例1:使用”total”便是用户建立的用来存储公司所有雇员工资总和的变量。
[root@localhost ~]# cat emp4 101,John Doe,CEO,10000 102,Jason Smith,IT Manager,5000 103,Raj Reddy,Sysadmin,4500 104,Anand Ram,Developer,4500 105,Jane Miller,Sales Manager,3000 [root@localhost ~]# cat emp.awk BEGIN{ FS=","; total=0; } { print $2 "'s salary is:" $4; total=total+$4; } END{ print "---\nTotal company salary=$"total; } [root@localhost ~]# awk -f emp.awk emp4 John Doe's salary is:10000 Jason Smith's salary is:5000 Raj Reddy's salary is:4500 Anand Ram's salary is:4500 Jane Miller's salary is:3000 --- Total company salary=$27000awk自定义变量的方法:
1.借助-v选项,可以将外部值(并非来自stdin)传递给awk
实例2:
1 2 3 4 5 6
[root@localhost ~]# awk -v var="young" 'BEGIN{print var,"\n","---"}{print var}' ./num young --- young young young
2.通过VAR=value的方式定义
实例3:
1 2 3 4
[root@localhost ~]# awk '{print v1,v2}' v1="young" v2="geek" ./num young geek young geek young geek
二、一元操作符
1.取正取反
只接受单个操作数的操作符叫做一元操作符。
实例1:取反操作
[root@localhost ~]# cat emp4 101,John Doe,CEO,10000 102,Jason Smith,IT Manager,5000 103,Raj Reddy,Sysadmin,4500 104,Anand Ram,Developer,4500 105,Jane Miller,Sales Manager,3000 [root@localhost ~]# awk -F, '{print -$4}' emp4 -10000 -5000 -4500 -4500 -3000注意:取反只对数值类数据生效,字符串取反结果全部为0.
实例2:
[root@localhost ~]# cat num -1 -2 -3 [root@localhost ~]# awk '{print +$1}' num -1 -2 -3 [root@localhost ~]# awk '{print -$1}' num 1 2 32.自增自减
VAR1=++VAR或者VAR1=--VAR,表示VAR先增加或者减去1再赋值给VAR1,VAR1=VAR++或VAR1=VAR--,表示先将VAR赋值给VAR1,VAR再增减或者减去1.
实例1:前自加子减
[root@localhost ~]# awk -F, '{print ++$4}' emp4 #前自加 10001 5001 4501 4501 3001 [root@localhost ~]# awk -F, '{print --$4}' emp4 #前自减 9999 4999 4499 4499实例2:后自加子减
[root@localhost ~]# awk -F, '{$4--;print $4}' emp4 #后自减 9999 4999 4499 4499 2999 [root@localhost ~]# awk -F, '{$4++;print $4}' emp4 #后自加 10001 5001 4501 4501 3001实例3:打印所有可登陆 shell 的用户总数:
[root@localhost ~]# awk -F':' >'$NF ~ /\/bin\/bash/ { n++ } > END { print n }' /etc/passwd 10 [root@localhost ~]# grep -c '/bin/bash$' /etc/passwd 10实例4:
[root@localhost ~]# cat num 1 2 1 1 3 4 2 [root@localhost ~]# awk '/1/{print NF}' num 1 1 1 [root@localhost ~]# awk '/1/{n++}END{print n}' num 3 [root@localhost ~]# awk '/2/{n++}END{print n}' num 2 [root@localhost ~]# awk '/3/{n++}END{print n}' num 1 [root@localhost ~]# awk '/4/{n++}END{print n}' num 1 三、算术运算符需要两个操作数的操作符,成为二元操作符。 Awk 中有多种基本二元操作符(如算术操作符、 字符串操作符、赋值操作符,等等)。