前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >awk命令

awk命令

作者头像
端碗吹水
发布2020-09-23 10:11:34
1.1K0
发布2020-09-23 10:11:34
举报

笔记内容:

l 9.6/9.7 awk

笔记日期:2017.8.21

9.6/9.7 awk

wKioL1nkGTuB8NUPAAr1vIrzw7A209.png
wKioL1nkGTuB8NUPAAr1vIrzw7A209.png

awk比sed、grep要复杂一些,awk支持分段,例如像passwd文件的内容很有规律用冒号分成七段,awk可以针对每一段进行匹配。

  awk最简单的用法就是照某个字符进行分割,然后可以选择打印某一段:

wKiom1nkG_OT9-esAAPeHwQcsq4138.png
wKiom1nkG_OT9-esAAPeHwQcsq4138.png
wKioL1nkGULCE055AAn4jdnXem8196.png
wKioL1nkGULCE055AAn4jdnXem8196.png

打印所有的段:

wKiom1nkG_yRakuyAAmXKEdcpDE614.png
wKiom1nkG_yRakuyAAmXKEdcpDE614.png

不分段,直接打印文件内容:

wKioL1nkGUqzqFpyAAgQ1K0EvxA318.png
wKioL1nkGUqzqFpyAAgQ1K0EvxA318.png

不指定分段的字符符就会默认以空格为分段字符:

wKiom1nkHALRx1v7AAZEVG50kEQ407.png
wKiom1nkHALRx1v7AAZEVG50kEQ407.png

打印多段内容:

wKioL1nkGVGhJ72hAAj3VGAUQYQ904.png
wKioL1nkGVGhJ72hAAj3VGAUQYQ904.png

指定打印的时候以什么字符进行分割,例如我以*号进行分割:

wKioL1nkGZXzq8YhAAv_BEubk3k942.png
wKioL1nkGZXzq8YhAAv_BEubk3k942.png

匹配指定字所在的行:

wKiom1nkHEuBiOQSAALyCUZtloU807.png
wKiom1nkHEuBiOQSAALyCUZtloU807.png

  指定匹配某一段并且此段包含指定字符的行,例如我指定匹配第一段包含有oo字符串的行:

wKiom1nkHEvD6iFvAAF34LhnBXE862.png
wKiom1nkHEvD6iFvAAF34LhnBXE862.png

这就是awk强大的地方,并且同样匹配正则表达式。

在awk中使用正则表达式不用加脱义符,默认就可以支持:

wKioL1nkGZai56rkAAGq40IgG9s170.png
wKioL1nkGZai56rkAAGq40IgG9s170.png

awk支持同时写多个表达式:

wKioL1nkGZfjlI0jAAK--TYHc7w304.png
wKioL1nkGZfjlI0jAAK--TYHc7w304.png

这个命令表示打印含有root或user字符的行

使用|也可以:

wKiom1nkHE6h9BLIAAJfjQmkIpI496.png
wKiom1nkHE6h9BLIAAJfjQmkIpI496.png

awk还可以使用关系运算符:

wKiom1nkHE6SSQdNAAIppE4P9oQ958.png
wKiom1nkHE6SSQdNAAIppE4P9oQ958.png

这个命令表示匹配第三段含有0的行

wKiom1nkHUKSQX1pAANxVfwh8bk129.png
wKiom1nkHUKSQX1pAANxVfwh8bk129.png
wKioL1nkGqCCPgCcAANj0dR-XWw553.png
wKioL1nkGqCCPgCcAANj0dR-XWw553.png

  以上使用关系运算符进行的匹配是按照实际数字大小来匹配的,如果要按ASCII码的的大小匹配的话,加上双引号即可:

wKiom1nkHVrTxkX_AAibmbvSLco584.png
wKiom1nkHVrTxkX_AAibmbvSLco584.png
wKioL1nkGqWgz-hEAAMNEyeeBSw610.png
wKioL1nkGqWgz-hEAAMNEyeeBSw610.png
wKiom1nkHWDRTmc7AAoH8kLhCEY092.png
wKiom1nkHWDRTmc7AAoH8kLhCEY092.png

在awk命令里使用比较运算符:

wKioL1nkGqyQQB2_AAP7rn4jACI091.png
wKioL1nkGqyQQB2_AAP7rn4jACI091.png
wKioL1nkGq3gxWPpAAJb-kd6r5U523.png
wKioL1nkGq3gxWPpAAJb-kd6r5U523.png
wKioL1nkGvnwOUlMAAJFkq5UJsA093.png
wKioL1nkGvnwOUlMAAJFkq5UJsA093.png

指定打印的分割符:

wKioL1nkGvqSq6MGAAMEZcGt7xc219.png
wKioL1nkGvqSq6MGAAMEZcGt7xc219.png

想要写得规整一些就加上if条件判断语句:

wKiom1nkHbGAKWzjAANJyl_tLDA414.png
wKiom1nkHbGAKWzjAANJyl_tLDA414.png

使用内置变量打印所有的行:

wKioL1nkGv-i0BKGAAj7BeCqygk952.png
wKioL1nkGv-i0BKGAAj7BeCqygk952.png

NR表示行

wKiom1nkHbmwxHasAAgziWZG0Zc566.png
wKiom1nkHbmwxHasAAgziWZG0Zc566.png

NF表示段

NR可以作为一个判断条件,例如我只打印前10行:

wKioL1nkGwazXECJAAUN7rq3ziM038.png
wKioL1nkGwazXECJAAUN7rq3ziM038.png

使用多个判断条件:

wKiom1nkHbyyMjrFAAJoQpjo-l4389.png
wKiom1nkHbyyMjrFAAJoQpjo-l4389.png

给NR和NF加上$符:

wKiom1nkHkaCPEYbAAxVxzUutxs240.png
wKiom1nkHkaCPEYbAAxVxzUutxs240.png

使用awk命令对文件的某一段进行赋值:

wKioL1nkG5GBHMOBAAMEZQb3-Gw599.png
wKioL1nkG5GBHMOBAAMEZQb3-Gw599.png

使用awk命令进行求和:

wKioL1nkG5KAgBnBAAJOO6sIe14541.png
wKioL1nkG5KAgBnBAAJOO6sIe14541.png

扩展

相关练习题

http://www.apelearn.com/study_v2/chapter14.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.6/9.7 awk
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档