Linux高级文本处理之gawk变量的操作符

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=$27000

awk自定义变量的方法:

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

 

二、一元操作符

cb962517ab27cac2.png

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 3

2.自增自减

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 中有多种基本二元操作符(如算术操作符、 字符串操作符、赋值操作符,等等)。

8437c5b680df3286.png

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14371.html