三剑客命令awk概述
gawk : pattern scanning and processing language
可以进行模式扫描 和 是一门语言
语法 : awk [参数] '模式{动作}' 文件
sed [参数] '条件 指令' 文件信息
- awk 原理图
awk命令执行流程.png
- 三剑客命令awk作用
处理文件信息:文本文件信息 日志文件信息 配置文件信息
处理方式文件:排除信息 查询信息 统计信息 替换信息
对文件进行处理
三剑客命令awk操作
创建测试环境
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50 :95 :135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
-
显示xiaoyu的姓氏和ID号码
awk '$2~/Xiaoyu/{print $1,$3}' reg.txt
image.png 姓氏是Zhang的人,显示他的第二次捐款金额及他的名字
awk -F "[: ]+" '$1~/Zhang/{print $1,$2,$5}' reg.txt
image.png
- 显示所有以41开头的ID号码的人的全名和ID号码
awk '$3~/^41/{print $1,$2,$3}' reg.txt|column -t
image.png
- 显示所有ID号码最后一位数字是1或5的人的全名
awk '$3~/[15]$/{print $1,$2}' reg.txt|column -t
image.png
- 获取文件中有井号或空行的内容, 将空行和井号信息的行排除
awk '$0!~/#|^$/' reg.txt
---方法一
awk '$0!~/#|^$/{print $0}' reg.txt
---方法二
image.png
- 显示Xiaoyu的捐款,每个捐款数额都是以
110
330
awk 'NR>2' reg.txt
显示第二个以后的行 不包括第二行
awk 'NR==2,NR==4' reg.txt
显示第2到第4行的数据
awk 'NR==2;NR==4' reg.txt
分别显示第二行和第四行的数据
awk特殊模式:
BEGIN{动作}: 在处理文件之前,先做什么事情
image.png
- 用于计算
image.png
- 修改内置变量
NF:取出最后一列
awk '{print $(NF-1)}' reg.txt
取出倒数第二列
image.png
NR: 表示行信息
FS: 指定列分隔符, 默认识别空格为分割符
awk 'BEGIN{FS="[: ]+"}{print $4}' reg.txt
image.png
指定一个变量
awk -vFS="[: ]+" '{print $1,$4}' reg.txt
image.png
- END{动作}: 在处理文件之后,再做什么事情
awk 'BEGIN{print "姓","名","号码","捐款记录"}{print $0}END{print "学生捐款登记表"}' reg.txt|column -t
image.png
实际作用:可以将统计后的最终结果进行输出
awk对文件进行统计分析
1) awk统计运算公式
i=i+1
1.统计文件行数
awk '/oldboy/{i=i+1}END{print i}' test.txt
awk '/oldboy/{i++}END{print i}' test.txt
image.png
2.数值信息求和运算
sum=sum+$n $n 你要对文件第几列信息做求和运算
seq 10|awk '{sum=sum+$1}END{print sum}'
image.png
练习: 找出有faild信息, 总共出现了多少次 (awk统计)
awk '$6~/Failed/{i++}END{print i}' secure-20161219'
image.png
课程知识梳理
1) awk命令概念介绍: 语法 原理 BEGIN 处理文件 END
2) awk命令操作说明: 作用 查询 排除 替换
参数:
-F : 指定列分割符号
-v : 指定变量信息
动作:
print : 输出指定信息
gsub : 替换指定信息
符号:
~ : 匹配信息 按照指定列进行匹配
!~ : 将匹配的信息取反
// : 指定匹配信息
3) awk命令模式分类
BEGIN{}: 处理文件前, 执行什么动作
END{}: 处理文件后, 执行什么动作
内置变量: FS NF NR --$0
4) awk命令实现运算功能
累加公式: i=i+1 i++
求和运算: sum=sum+$n