Day 19 操作系统 三剑客 awk

01课程介绍

1掌握awk命令基础用法

2 掌握awk命令扩展功能:统计 运算功能

高级部分awk数组部分 shell数组

02课程回顾

sed 命令作用了解

语法结构: sed[参数] ‘条件 sed指令’ 文件信息

sed命令实际应用:

查询数据信息:sed -n ‘/查询信息/p’ 文件信息

添加数据信息: sed -i.bak ‘条件信息 在哪个位置i/a 添加的内容信息’ 文件信息

删除数据信息: sed -ir.bak ‘/条件01|条件02/d’ 文件信息

替换/修改数据信息:sed -i.bak ‘s#要替换的信息#替换成的信息#g’ 文件信息

:sed -ri.bak ‘s#要替换的信息(保留信息)#替换成的信息\1#g’ 文件信息 (后项引用前项)

:sed -i.bak ‘s#正则匹配信息#&#g’ 文件信息

:sed -i.bak ‘3c oldboy’ 文件信息 整行替换

sed命令测验练习

利用sed命令取出IP地址

利用sed命令批量创建用户

利用sed命令取出文件权限

利用sed命令批量修改文件扩展名

利用sed命令编写脚本.修改服务器IP地址信息脚本 sh change_ip.sh

03三剑客awk概述

awk 说明图:

Day 19 操作系统 三剑客 awk_第1张图片
image.png

gawk - pattern scanning and processing language 可以模式扫描与处理语言

语法结构: awk [参数] ‘模式{动作}’ 文件信息

执行原理:

Day 19 操作系统 三剑客 awk_第2张图片
image.png

功能说明:擅长处理日志文件.排除 查询 统计 替换

04三剑客命令: awk作用说明

处理文件信息:文本文件 日志文件 配置文件

处理文件方式: 排除信息 查询信息 统计信息 替换信息

05三剑客命令awk操作:

创建环境:

cat >> reg.txt<

1显示Xiaoyu的姓氏和ID 号码

awk’{print 3}’ 文件信息

1).找出需要编写模式信息

获取 Xiaoyu信息

[root@oldboy63 ~]# awk '/Xiaoyu/' reg.txt

Zhang Xiaoyu 390320151 :155:90:201

2 )根据条件做处理

显示满足条件的第三列和第一列
~--匹配的意思

[root@oldboy63 ~]# awk '$2~/Xiaoyu/' reg.txt

Zhang Xiaoyu 390320151 :155:90:201

[root@oldboy63 ~]# awk '$2~/Xiaoyu/{print $1 $3}' reg.txt

Zhang390320151

[root@oldboy63 ~]# awk '$2~/Xiaoyu/{print $1, $3}' reg.txt

Zhang 390320151

2,姓氏是张的人,显示他的第二次捐款金额及他的名字

第一:找出需要编写模式信息

[root@oldboy63 ~]# awk '$1~/Zhang/' reg.txt

Zhang Dandan 41117397 :250:100:175

Zhang Xiaoyu 390320151 :155:90:201

第二:根据条件做处理

默认分割方式,使用空格分割列

[root@oldboy63 ~]# awk '$1~/Zhang/{print $1, $2, $4}' reg.txt

Zhang Dandan :250:100:175

Zhang Xiaoyu :155:90:201
指定分割符 -F “:”
[root@oldboy63 ~]# awk -F ":" '$1~/Zhang/{print $1, $2, $4}' reg.txt

Zhang Dandan 41117397 250 175

Zhang Xiaoyu 390320151 155 201
将多个连续分割合并为一个整体: -F "[: ]+"
[root@oldboy63 ~]# awk -F "[: ]+" '$1~/Zhang/{print $1, $2, $4}' reg.txt

Zhang Dandan 250

Zhang Xiaoyu 155

[root@oldboy63 ~]# awk -F "[: ]+" '$1~/Zhang/{print $1, $2, $5}' reg.txt

Zhang Dandan 100

Zhang Xiaoyu 90
Day 19 操作系统 三剑客 awk_第3张图片
image.png

3,显示所有以41 开头的ID号码的人的全名和ID号码

[root@oldboy63 ~]# awk '$3~/^41/{print $1, $2, $3}' reg.txt

Zhang Dandan 41117397

Liu Bingbing 41117483

4.显示所有ID号码最后一位数字是以1 或5 的人的全名

[root@oldboy63 ~]# awk '$3~/1$|5$/{print $1, $2, $3}' reg.txt |column -t

Zhang Xiaoyu 390320151

Wu Waiwai 70271111

Wang Xiaoai 3515064655

Li Youjiu 918391635

Lao Nanhai 918391635

[root@oldboy63 ~]# awk '$3~/(1|5)$/{print $1, $2, $3}' reg.txt |column -t

[root@oldboy63 ~]# awk '$3~/[15]$/{print $1, $2, $3}' reg.txt |column -t

5.获取文件中有井号和空行的内容,将空行和井号信息的信息排除

找出需要编写模式信息

[root@oldboy63 ~]#awk '$0~/^#|^$/' reg.txt

#Zhang Xiaoyu 390320151 :155:90:201

#Zi Gege 1986787350 :250:168:200

#Lao Nanhai 918391635 :250:100:175

  [root@oldboy63 ~]#awk '$0!~/^#|^$/' reg.txt

Zhang Dandan 41117397 :250:100:175

Meng Feixue 80042789 :250:60:50

Wu Waiwai 70271111 :250:80:75

Liu Bingbing 41117483 :250:100:175

Wang Xiaoai 3515064655 :50:95:135

Li Youjiu 918391635 :175:75:300

 [root@oldboy63 ~]#awk '!/^#|^$/' reg.txt

Zhang Dandan 41117397 :250:100:175

Meng Feixue 80042789 :250:60:50

[root@oldboy63 ~]#awk '!/^#|^$/{print $0}' reg.txt

Zhang Dandan 41117397 :250:100:175

6,显示Xiaoyu的捐款,每个捐款数额都是以"110"

[root@oldboy63 ~]#awk '$2~/Xiaoyu/{print $4}' reg.txt |sed 's#:#$#g'

$155$90$201

[root@oldboy63 ~]#awk '$2~/Xiaoyu/{print$1,$2, $4}' reg.txt |sed 's#:#$#g'

#Zhang Xiaoyu $155$90$201

[root@oldboy63 ~]#awk '$2~/Xiaoyu/{print$1,$2, $4}' reg.txt |tr ':' '$'

#Zhang Xiaoyu $155$90$201

[root@oldboy63 ~]#awk -F "[: ]+" '$2~/Xiaoyu/{print $1, $2, "$"$4,"$"$5,"$"$6}' reg.txt

#Zhang Xiaoyu $155 $90 $201

awk替换:

gsub =gawk substitute

gsub(/要替换的信息/,”替换成什么信息”.$第几列)

[root@oldboy63 ~]#awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' reg.txt 

$155$90$201

[root@oldboy63 ~]#awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' reg.txt

$155$90$201

06awk命令模式分类

普通模式:比较模式

[root@oldboy63 ~]#awk 'NR==2' reg.txt NR==2: nr 表示文件行信息

#Zhang Xiaoyu 390320151 :155:90:201

[root@oldboy63 ~]#awk 'NR>2' reg.txt

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

[root@oldboy63 ~]#awk 'NR==2,NR==4' reg.txt

Zhang Xiaoyu 390320151 :155:90:201

Meng Feixue 80042789 :250:60:50

Wu Waiwai 70271111 :250:80:75

[root@oldboy63 ~]#awk 'NR==2;NR==4' reg.txt

Zhang Xiaoyu 390320151 :155:90:201

Wu Waiwai 70271111 :250:80:75

特殊模式: BEGIN {动作} :在处理文件之前先做什么事情

END{动作} :在文件处理后再做什么动作

[root@oldboy63 ~]#awk 'BEGIN{print "姓","名","号码","捐款记录"}{print $0}END{print "学生捐款登记表"}' reg.txt|column -t

姓  名  号码  捐款记录

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

学生捐款登记表

07用于运算:

[root@oldboy63 ~]#awk "BEGIN{print 2+2}"

4

[root@oldboy63 ~]#awk "BEGIN{print 2-2}"

0

[root@oldboy63 ~]#awk "BEGIN{print 2*2}"

4

[root@oldboy63 ~]#awk "BEGIN{print 3/2}"

1.5

[root@oldboy63 ~]#awk "BEGIN{print 3^2}"

9

[root@oldboy63 ~]#awk "BEGIN{print 3**2}"

9

[root@oldboy63 ~]#awk "BEGIN{print 3**3}"

27

[root@oldboy63 ~]#awk "BEGIN{print 5%3}"

2

修改内置变量:

NF: 取出最后一列

NR:表示行信息

-F:表示对区域进行分割,

FS:指定列分隔符, 默认识别空格为分割符

[root@oldboy63 ~]#awk '{print $NF}' reg.txt

:250:100:175

:155:90:201

:250:60:50

:250:80:75

:250:100:175

:50:95:135

:250:168:200

:175:75:300

:250:100:175
[root@oldboy63 ~]#awk '{print $(NF-2)}' reg.txt --- 取到数第二列

Dandan

Xiaoyu

Feixue

Waiwai

Bingbing

Xiaoai

Gege

Youjiu

Nanhai

[root@oldboy63 ~]#awk '{print $(NF-1)}' reg.txt

41117397

390320151

80042789

70271111

41117483

3515064655

1986787350

[root@oldboy63 ~]#awk 'BEGIN{FS="[:]+"}{print $1}' reg.txt

Zhang Dandan 41117397   

Zhang Xiaoyu 390320151  

Meng Feixue 80042789   

Wu Waiwai 70271111   

Liu Bingbing 41117483   

Wang Xiaoai 3515064655 

Zi Gege 1986787350 

Li Youjiu 918391635  

Lao Nanhai 918391635  

[root@oldboy63 ~]#awk 'BEGIN{FS="[:]+"}{print $2}' reg.txt

250

155

250

[root@oldboy63 ~]#awk -voldboy=3 '{print $1,$oldboy}' reg.txt

Zhang 41117397

Zhang 390320151

Meng 80042789

Wu 70271111

Liu 41117483

Wang 3515064655

Zi 1986787350

Li 918391635

Lao 918391635

[root@oldboy63 ~]#awk -voldboy=3 '{print $1,oldboy}' reg.txt

Zhang 3

Zhang 3

Meng 3

Wu 3

Liu 3

Wang 3

Zi 3

Li 3

Lao 3

[root@oldboy63 ~]#awk -voldboy=3 '{print $1,"oldboy"}' reg.txt

Zhang oldboy

Zhang oldboy

Meng oldboy

[root@oldboy63 ~]#awk -vFS="[: ]+" '{print $4}' reg.txt

250

155

250

250

250

50

250

175

250

[root@oldboy63 ~]#awk -vFS="[: ]+" '{print $2,$4}' reg.txt

Dandan 250

Xiaoyu 155

Feixue 250

Waiwai 250

Bingbing 250

Xiaoai 50

Gege 250

Youjiu 175

Nanhai 250

统计:

END实际作用:将统计后的结果分析输出

[root@oldboy63 ~]#awk '/oldboy/' test.sh

oldboy

oldboy

oldboy

oldboy

oldboy

oldboy

[root@oldboy63 ~]#awk '/oldboy/{i=i+1;print i}' test.sh

1

2

3

4

5

6

![image.png](https://upload-images.jianshu.io/upload_images/18571001-0e0d6778590154a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

[root@oldboy63 ~]#awk '/oldboy/{i=i+1}END{print i}' test.sh

6

[root@oldboy63 ~]#awk 'BEGIN{i=10}/oldboy/{i=i+1}END{print i}' test.sh

16

统计文件行数

[root@oldboy63 ~]#awk '/oldboy/{i=i+1}END{print i}' test.sh

6

[root@oldboy63 ~]#awk '/oldboy/{i++}END{print i}' test.sh

6

[root@oldboy63 ~]# seq 10 |awk '{sum=sum+$1;print sum}'

1

3

6

10

15

21

28

36

45

55

[root@oldboy63 ~]# seq 10 |awk '{sum=sum+$1}END{print sum}'

55

![image.png](https://upload-images.jianshu.io/upload_images/18571001-9fffa112fa043e2d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 [root@oldboy63 ~]#rz -E

rz waiting to receive.

[root@oldboy63 ~]# awk '/Failed/{i++}END{print i}' secure-20161219

367500

[root@oldboy63 ~]# awk '$6~/Failed/{i++}END{print i}' secure-20161219

367500

08. 课程知识梳理:

  1. awk命令概念介绍: 语法 原理 BEGIN 处理文件 END

  2. awk命令操作说明: 作用 查询 排除 替换

参数:

-F : 指定列分割符号

-v : 指定变量信息

动作:

print : 输出指定信息

gsub : 替换指定信息

符号:

~ : 匹配信息 按照指定列进行匹配

!~ : 将匹配的信息取反

// : 指定匹配信息

  1. awk命令模式分类

BEGIN{}: 处理文件前, 执行什么动作

END{}: 处理文件后, 执行什么动作

内置变量: FS NF NR --$0

  1. awk命令实现运算功能

累加公式: i=i+1 i++

求和运算: sum=sum+$n

你可能感兴趣的:(Day 19 操作系统 三剑客 awk)