awk的使用场景?
awk是行处理器,相比较屏幕处理信息的优点在于不会由于文件过大而出现内存溢出和处理缓慢的问题,通常用于格式化信息。
awk的组成部分
awk -F/f/v ‘BEGIN{} 匹配代码段 {输出代码段} ORS="\n" OFS=" " END{}’ filename
- -F:-F可以用来指定输入的字段分隔符,常用方法有:-F:和-F’[:# ]’
- -f用来指定脚本文件
- -v用来声明变量
- BEGIN代码块是在对信息进行处理之前,初始化代码。主要完成以下几件事:
- RS:指定输入记录分隔符
- FS:指定输入字段分隔符,和-F同理
- 声明变量
- 匹配代码块(可以使用正则表达式匹配):
- //:纯字符匹配,例如/mail/匹配包含mail的行,/^d/匹配以数据开头的行,/[0-9]+/匹配包含数字的行,/[a-z]/匹配包含字母的行,/bash$/匹配以bash结尾的行
- !//:纯字符不匹配,同//
- ~//:字段值匹配,例如$1 ~/mail/匹配第一个字段为mail的行
- !~//:字段值不匹配,同上
- /a|b/:匹配a或b记录,例如/mail|mysql/匹配包含mail或者mysql的行
- /a/,/b/:匹配a到b区间的记录,例如/mail/,/mysql/匹配从mail到mysql行的区间
- 输出代码块:
- print:输出信息
- $0:打印记录信息
- $1:打印第一个字段
- NF:每个记录的字段数量
- NR:每个记录的行号,多个文件递增
- FNR:每个记录的行号,每个文件从1开始
- if else:判断条件用()包含起来,执行语句用{}包含起来
- ORS:指定输出的记录分隔符
- OFS:指定输出的字段分隔符
- END代码块是在对记录处理完以后执行,主要进行最终计算和获得概要信息
更多问题可以加公众号:代码小栈,期待为您解决更多问题