awk用法
awk
awk命令与sed和grep合称为linux"文本处理三剑客!",是linux文本处理强大工具,它在sed和grep之上扩展了诸多重要性质,包含"循环/选择/顺序"等流程控制方面的特性,以及数组,链表,变量等内存控制方面的特性.可以称其为一门强大的文本处理编程语言,实现诸如按行/列统计,按满足特定条件的方式对文本实现统计并格式化输出等高级功能.其结合正则表达式,可以实现非常高效复杂的运算.是运维研发人员的高效工具.下面逐一介绍其功能和使用方法
awk基础
1.awk命令的使用方法
awk命令做为成熟可靠的文本处理工具,在多数linux系统版本已经内置(即使时最小化安装OS),所以无须安装即可使用.验证方式
1.whereis命令
~]$ whileis awk,改命令定位可执行文件、源代码文件、帮助文件在文件系统中的位置
2.使用rpm命令
rpm -qa |grep awk #改命令会列出已经安装的awk包以及其版本信息
如: gawk-4.2.1-4.el8.x86_64
注意:新细节
Rockylinux和centos8系统,网卡重启命令以及改变.
nmcli c[connection] up/down[action] ens32[网卡名称]
2.awk命令的语法结构
awk获取帮助
man awk或者 awk --help 两种方式,书写风格.
gawk [ options ] [ -- ] program-text file ...
awk [options] -f progfile [--] file ...
3.awk命令各常用选项option的含义
POSIX options: GNU long options: (standard) #POSIX标准选项
-f progfile --file=progfile # -f与--file等价
-F fs --field-separator=fs # -F 用于指定字符串分隔符
-v var=val --assign=var=val # 定义变量的参数
Short options: GNU long options: (extensions) # 长选项, 段选项
-b --characters-as-bytes
...略
awk命令使用举例
awk 'pattern { action }' filename
awk '条件1 {动作 1} 条件2 {动作 2} …' 文件名
3.1awk的模式匹配
awk 'pattern { action }' filename中分为匹配模式(亦可陈条件)和action动作
# 在awk中还可以多个条件与动作一起使用
# 1.条件有多种,关系表达式
第一类: awk保留字,BEGIN,end,在执行语句之前或者之后执行一次这个动作.
第二类: 关系运算: >大于 <小于 >=大于等于 <=小于等于, ==等于, !=不等于, A~B字符串A是否包含能匹配B表达式的字符串,A!~B,
第三类: 正在表达式, // 比如在"//"中写入字符,则可以支持正则表达式.
~]$ awk
3.2动作action
第一: 格式化输出
第二: 流程控制语句
4.基础用法
~]$ awk -F'[: ]' '{print $1 "\t" $6 "\n"}' /etc/passwd #结构化打印/etc/passwd文本里面的第一列和第6列的内容,会打印第一列后打印一个制表符,然后再打印一个6个,然后再下一行打印换行符
root /root
bin /bin
daemon /sbin
adm /var/adm
begin和end命令,指的是在执行打印之前就执行这个命令,end打印完全所有的再执行
略
关系运算符的使用
#判断第六个字段大于等于87,如果判断式成立,则打印第六列(学员名)
awk -F":" '$4>100 {printf "%-5s %-5s\n",$1, $7}' /etc/passwd #其中包含printf函数的使用,即按照特定宽度打印,占位符
# 如果第二字段中包含sc字符,则打印第6个字段
~]$ awk '$2 -/Sc/ {printf $6 "\n"}' student.txt #包含sc字符串的,打印学生成绩
awk正则模式匹配
# 模式匹配是为了筛选出特定的行,再对这些行,进行处理action, awk 'pattern {action}' 其中pattern部分可以使用正则匹配
#打印匹配到liming这个字符串的行
awk '/liming/{print}' filename
#使用正则匹配
df-TH| awk '/sda[0-9]/{print}' #查询真正的文件系统使用量
5.awk action中的常用函数
gsub, print, printf
awk 'gsub(/\$/,"");gsub(/,/,""); cost+=$4; # 使用gsub函数,可以替换行$与, 替换称为空白.
# print 与printf函数,也是awk的保留关键字,都是用于打印,不同的是printf可以指定格式化输出字符串,而print是直接打印
awk '{print $1,$3}'
awk '{printf "%-10s%-10s\n",$1,"\t",$3}' file #输出时指定第一个字符占用10位,第二个10位,两位之间插入制表符\t
6.awk预置的环境变量
引用awk预制变量,需要使用$符号
$n当前记录的n项,$0完整记录(完整行)
argc 命令行参数的数目
argind 命令行中当前文件的位置
argv 包含命令行参数的数组
errno 最后一个系统错误的描述.
nr 当前记录个数
nf当前记录中的字段数
awk 'printf $NF'
awk流程控制
本部分做为进阶
诸事顺利!hava a nice day!

浙公网安备 33010602011771号