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
相关推荐
chenpro 2020-07-04
fendou00sd 2020-06-16
RealJianyuan 2020-06-14
cwgxiaoguizi 2020-06-05
chenpro 2020-06-02
Neptune 2020-05-31
老谢的自留地 2020-05-09
YukiRain 2020-05-08
baobaozai 2020-04-29
Proudoffaith 2020-04-08
fenxinzi 2020-03-01
zhiliang 2020-01-31
wannagonna 2020-01-13
wandererdl 2019-12-25
chenchuang 2020-01-25
jyj00 2020-01-09
fendou00sd 2020-01-07
fendou00sd 2020-01-06
PHP学习笔记 2020-01-06