曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3195|回复: 1
打印 上一主题 下一主题

模式与操作

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-9-22 12:51:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
awk 用 “模式” 来控制对输入的文本执行什么操作。模式判断条件,正则表达式,或者是二者的组合构成。模式表达式中暗含了 if 语句。比如下面的命令:
# df |awk '$2 < 1028736'
none                   1019276       240   1019036   1% /dev
df 命令查看磁盘的空间,这里使用 awk 找出空间小于 1019276K 的挂载点。在 awk 中,$2 < 1028746 是一个判断条件,该判断已经隐含使用了 if 语句。如果显式的给出 if,那么这个表达式就会成了“操作“语句。

操作(action) 是写在花括号中,并以分号分隔的语句。操作可以是简单的一条语句,也可以是多条复杂的语句组。同一行内的多条语句由分号分隔,独占一行的语句则以换行符分隔。如下所示两种格式:
格式一
模式 { 操作语句1; 操作语句2; ...; }
格式二
模式 {
          操作语句1
          操作语句2
          ...
}

下面使用 ”模式 + 操作“ 处理一个简单的文本,文本(temp.txt)的内容如下:
abc     www     3201    3/13/11         30138
def     gro     3033    2/32/13         02901
xyz     dai     3010    8/81/11         10391
opq     lio     8901    7/18/38         31899

执行下面命令:
# awk '/xyz/{print "Hello ", $1; print "Your number is ", $5}' temp.txt Hello  xyz
Your number is  10391
上面命令中的 $1 和 $5 也可以写到 print 函数中,这时候要用引号将它们括起来方能解析成它所代表的记录,否则就直接打印成 $1 或 $5:
# awk '/xyz/{print "Hello $1"; print "Your number is "$5""}' temp.txt
Hello $1
Your number is 10391

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
沙发
 楼主| 发表于 2011-9-22 17:03:06 | 只看该作者

范围模式

范围模式先匹配第一个模式首次出现到第二个模式的首次出现之间的内容,然后匹配从第一个模式的下一次出现到第二个的下一次出现,以此类推。如果匹配到的第一个模式而没有发现第二模式,那么将显示从第一个模式出现的行到文件末尾之间的所有行。

如有下面一个文本:
you
should
focus
your
attention
on
your
work
运行下面的命令:
# awk '/should/,/your/' test
should
focus
your
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 18:42 , Processed in 0.065396 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表