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 说明图:

image.png

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

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

执行原理:

image.png

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

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

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

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

05三剑客命令awk操作:

创建环境:

cat >> reg.txt<<EOF

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

1显示Xiaoyu的姓氏和ID 号码

awk’{print 13}’ 文件信息

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
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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容