曲径通幽论坛

标题: 模式与操作 [打印本页]

作者: beyes    时间: 2011-9-22 12:51
标题: 模式与操作
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

作者: beyes    时间: 2011-9-22 17:03
标题: 范围模式
范围模式先匹配第一个模式首次出现到第二个模式的首次出现之间的内容,然后匹配从第一个模式的下一次出现到第二个的下一次出现,以此类推。如果匹配到的第一个模式而没有发现第二模式,那么将显示从第一个模式出现的行到文件末尾之间的所有行。

如有下面一个文本:
you
should
focus
your
attention
on
your
work
运行下面的命令:
# awk '/should/,/your/' test
should
focus
your





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2