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!

posted @ 2023-12-16 19:29  蜜猿  阅读(576)  评论(0)    收藏  举报