ITPub博客

首页 > Linux操作系统 > Linux操作系统 > linux之shell awk 之一

linux之shell awk 之一

原创 Linux操作系统 作者:liqilin0429 时间:2011-01-24 14:20:41 0 删除 编辑
awk抽取域 不输出到屏幕上
oracle@ser168:~/qilin/demo> awk '{print $1,$2,$7}' grade.txt >wow_3.txt
awk抽取域 输出到屏幕上
    oracle@ser168:~/qilin/demo> awk '{print $1,$4}' grade.txt | tee delete_mde_and_die
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
打印所有记录
  oracle@ser168:~/qilin/demo> awk '{print $0}' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28 
打印报告头
 oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name  belt\n-------------------"} {print $1"\t"$4}' grade.txt
name  belt
-------------------
M.Tansley       Green
J.Lulu  green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley       Brown-2
打印信息尾
 oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name\n-----"} {print $1} end {"end-of-report"}' grade.txt
name
-----
M.Tansley
J.Lulu
P.Bunny
J.Troll
L.Tansley
 匹配 如果记录包含模式b r o w n,就打印它:
 oracle@ser168:~/qilin/demo> awk '$0 ~ /Brown/' grade.txt
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28
 精确匹配--假定要使字符串精确匹配,比如说查看学生序号 4 8,文件中有许多学生序号包含 4 8,如果在f i e l d - 3中查询序号4 8,a w k将返回所有序号带4 8的记录:
oracle@ser168:~/qilin/demo> awk '{if($3~/48/) print $0}' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
 精确匹配--为精确匹配4 8,使用等号= =,并用单引号括起条件。例如 $ 3 = =“4 8” ,这样确保只有4 8序号得以匹配,其余则不行
oracle@ser168:~/qilin/demo> awk '$3=="48" {print $0}' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
不匹配--有时要浏览信息并抽取不匹配操作的记录,与 ~相反的符号是!~,意即不匹配。像原来使用查询b r o w n腰带级别的匹配操作一样,现在看看不匹配情况。表达式 $0 !~/brown/,意即查询不包含模式b r o w n腰带级别的记录并打印它
oracle@ser168:~/qilin/demo> awk '$0 !~/Brown/' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
P.Bunny         02/99   48        Yellow        12      35      28
大于
oracle@ser168:~/qilin/demo> awk '{if ($6>$7) print $1}' grade.txt
P.Bunny
L.Tansley
小于等于
oracle@ser168:~/qilin/demo> awk '{if ($6 <=$7) print $1}' grade.txt
M.Tansley
J.Lulu
J.Troll
设置大小写
oracle@ser168:~/qilin/demo> awk '/[Gg]reen/' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
设置大小写--为查询大小写信息,可使用[ ]符号。在测试正则表达式时提到可匹配[ ]内任意字符或单词,因此若查询文件中级别为g r e e n的所有记录,不论其大小写,表达式应为‘ / [ G g ] r e e n /: ’
oracle@ser168:~/qilin/demo> awk '$1~/^...a/' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
L.Tansley       05/99   4712      Brown-2       12      30      28
或关系匹配--为抽取级别为y e l l o w或b r o w n的记录,使用竖线符 |。意为匹配 | 两边模式之一。注意,使用竖线符时,语句必须用圆括号括起来。
oracle@ser168:~/qilin/demo> awk '$0~/(Yellow|Brown)/' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28
11. AND--打印记录,使其名字为‘ P. B u n n y且级别为 Ye l l o w,使用表达式 ( $ 1 = = " P. B u n n y " & &$ 4 = = " Ye l l o w " ),意为& &两边匹配均为真。完整命令如下:
oracle@ser168:~/qilin/demo> awk '{if ($1=="P.Bunny" && $4=="Yellow")print $0}' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
12. Or--如果查询级别为Ye l l o w或B r o w n,使用或命令。意为“ | |”符号两边的匹配模式之一或全部为真。
oracle@ser168:~/qilin/demo> awk '{if ($4=="Yellow" || $4~/Brown/) print $0}' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20976446/viewspace-684538/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-08-13

  • 博文量
    100
  • 访问量
    197758