AWK工具学习(二)-运算符与表达式

上一部分主要是认识awk编程模型及简单示例,见http://tonylee0329.iteye.com/admin/blogs/1810758

本节主要讨论awk中的运算符和表达式

A.1记录和域

awk中认为文本文件的一行即是一条记录,一条记录由多个域构成,

以下:awktestbytony

包含四个域,由空格进行分割。

用'$n'标识域的值,如$1=awk.

注:$0表示全部域。

域操作符后面还可以跟变量,示例:

[lidc@hd66 awk-experiment]$ echo 'awk test by tony'>input
[lidc@hd66 awk-experiment]$ cat input 
awk test by tony
[lidc@hd66 awk-experiment]$ awk 'BEGIN {start=1;end=3} {print $(start+end)}' input
tony

awk默认的分隔符是空格,TAB被认为是连续的空格键来处理,我们可以使用-F来自定义分隔符

awk-F"~==~"'{...}'input

还可以预先设置awk的环境变量FS,指定分隔符

[lidc@hd66 awk-experiment]$ awk 'BEGIN {FS=","} {print $0}' input
tony ,    23 ,    male
emma ,    23 ,    female
[lidc@hd66 awk-experiment]$ awk 'BEGIN {FS=","} {print $2}' input
    23 
    23

A.2运算符

awk运算符常见的都有如:

大于>

小于<

大于等于>=

小于等于<=

等于==

不等于!=

逻辑或||

逻辑与&&

逻辑非!

不常见的是以下两个

~匹配正则表达式

!~不匹配正则表达式

举个匹配正则的例子:

[lidc@hd66 awk-experiment]$ awk -F":" '$0~/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

记录中只要匹配root即可

awk的条件语句及运算符使用示例:

[lidc@hd66 awk-experiment]$ awk -F":" '{if($3==10 || $4==0) print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

A.3表达式

awk表达式用于存储、操作和获取数据,一个awk表达式可由数值、字符常量、变量、操作符、函数和正则自由组合而成

变量名:

只能包含字母、数字、下划线

不能以数字开头

区分大小写

变量可进行加、减、乘、除、乘方、取模等操作

小练习:求学生三科平均成绩

[lidc@hd66 awk-experiment]$ cat score 
tony ,    23 ,    male,90,90,93
emma ,    23 ,    female,100,80,90
[lidc@hd66 awk-experiment]$ cat getAvgScore.awk 
#!/bin/awk    -f
BEGIN {FS=","}
{
    total=$4+$5+$6
    avg=total/3
    print $1,avg
}
[lidc@hd66 awk-experiment]$ awk -f getAvgScore.awk > students-score 

[lidc@hd66 awk-experiment]$ awk -f getAvgScore.awk score > students-score 
[lidc@hd66 awk-experiment]$ cat students-score 
tony  91
emma  90

相关推荐