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

本文详细介绍了Awk编程语言中的记录与域概念、各种运算符(包括正则表达式匹配)以及如何使用表达式进行数据操作。通过实际例子展示了如何利用Awk处理文本文件,例如自定义分隔符、条件筛选和计算学生的平均成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一部分主要是认识awk编程模型及简单示例,见[url]http://tonylee0329.iteye.com/admin/blogs/1810758[/url]
本节主要讨论awk中的运算符和表达式
A.1 记录和域
awk中认为文本文件的一行即是一条记录,一条记录由多个域构成,
以下:awk test by tony
包含四个域,由空格进行分割。
用'$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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值