Shell笔记第八天 awk第二篇

来源:互联网 发布:gtaol捏脸数据女大胸 编辑:程序博客网 时间:2024/05/29 16:01

本篇记录awk的各种用法实例,红色为命令,绿色为输出结果

输入文件grade.txt,总共7个域,分别是姓名,升段日期,学生序号,腰带级别,年龄,目前比赛积分,比赛最高积分

$ vim 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

1. awk '{print $1,$4}' grade.txt
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
打印第一个和第四个域

2. awk 'BEGIN {print "Name Belt\n------------------"} {print $1 "\t" $4} END {print "-----End----"}' grade.txt
Name Belt
--------------------------------
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
-----End----

用BEGIN和END模式打印文件头和文件尾

3. awk '{if($4~/Brown/) print $0}' grade.txt
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28

腰带等级为Brown的记录

正则表达式用斜线括起来,~表示匹配正则表达式,if语句用括号括起来

4. awk '{if($4=="Brown-2") print $0}' grade.txt
L.Tansley 05/99 4712 Brown-2 12 30 28

精确匹配

5. 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

不匹配

6. awk '{if ($6 < $7)print $1 " try better at the next comp"}' grade.txt
M.Tansley try better at the next comp
J.Lulu try better at the next comp

小于的用法,大于,小于等于,大于等于用法类似

7. awk '/[Gg]reen/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26

利用正则表达式设置大小写

8. awk '$0 ~/(Yellow|[Gg]reen)/' 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
或关系匹配

9. 复合模式

&& 模式中两边的语句都为真

|| 模式中任意一边的语句为真

!非,求逆

awk '{if ($1=="P.Bunny" && $4=="Yellow") print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28

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