Linux63期 day-19 操作系统awk命令

01.课程介绍部分

1.掌握awk命令基础用法
2.掌握awk命令扩展功能  统计  运算功能
    了解awk数组部分  shell数组 (一起讲)

02.昨日知识

1.sed命令作用  语法:sed [参数] '条件 指令'  文件
2.sed命令实操
   ①查询数据信息   sed -n  '/查什么/p ' 文件信息
   ②添加数据信息    sed -i.bak '在哪添加 i/a添加的内容' 文件信息
   ③删除数据信息   sed -ri.bak '/条件01|条件01/d' 文件信息
   ④替换数据信息   sed -i.bak  's#要替换#替换成#g' 文件信息
                  sed -ri.bak 's#要替换的信息(保留信息)#替换的信息\1#g' 文件信息
                  sed -ri.bak 's#正则匹配信息#&(前面的信息)#g'文件信息
                  sed -i.bak  '3c 改成什么'  文件信息  ---第三行全部替换
一.sed命令练习题
1.利用sed命令取出ip地址
2.利用sed命令批量创建用户
3.利用sed命令取出文件权限
4.利用sed命令批量修改文件扩展名
5.利用sed命令编写脚本
    修改服务器IP地址信息脚本                     
03.三剑客命令awk概述
man awk详情:gawk - pattern scanning and processing language
                  可以进行模式扫描   和    一门语言
命令使用格式: awk [参数] '模式{动作}'  文件        (擅长列进行处理) 
   与sed对比:  sed [参数] '条件 指令'   文件      (擅长对文件内容的行进行处理)
原理:  如图:
33 awk原理.png
04.三剑客命令awk作用
处理文件信息: 文本文件
            擅长处理日志
            配置文件
处理文件方式: 排除 查询  统计  替换
             擅长对文件的列进行处理

05.awk命令的操作

 创建测试环境                
  # cat reg.txt
  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号
 第一步:获取xiaoyu信息
  awk '/Xiaoyu/' reg.txt      ---不管哪里有xiaoyu都会显示
  awk '$2~/Xiaoyu/' reg.txt   ---只找第二列有xiaoyu的 
 第二步:满足条件显示第三列与第一列
  awk '$2~/Xiaoyu/{print $1 $2}' reg.txt    ---中间不会有空格
  awk '$2~/Xiaoyu/{print $1,$2}' reg.txt    ---,代表空格或 " "双引号表示空格

 2.姓氏是zhang的人,显示他的第二次捐款金额以及他的名字    
   第一步:找出需要编写模式
   awk '$1~/Zhang/' reg.txt       ---姓氏为zhang的找出来
   第二步: 
   # awk '$1~/Zhang/{print $1,$2,$4}' reg.txt   ---姓氏 名字 三次捐款金额
 Zhang Dandan :250:100:175
 Zhang Xiaoyu :155:90:201

 # awk -F "[: ]+" '$1~/Zhang/{print $1,$2,$5}' reg.txt   
                                       ---[: ]以: 都为分隔符,将多个分隔符合并为整体使用正则符号 +
Zhang Dandan 100
Zhang Xiaoyu 90
ps:awk默认以空格为分隔符,如果想用其他分隔符 参数-F "[以什么为分隔符]+" [] +都为正则符号应用


  3.显示所有以41开头的ID号码的人的全名和ID号码
   第一步:先找出模式 以41开头的
   awk '$3~/^41/' reg.txt     ---以41kait
   第二步:根据条件
   awk '$3~/^41/{print $1,$2,$3}'

  4.显示所有ID号码最后一位数字是1或者5的人的全名
   第一步:先找出模式 以1或5结尾的
   awk '$3~/1$|5$/' reg.txt    ---利用正则 |
   awk '$3~/[15]$/' reg.txt    ---利用正则 []
   第二步:根据条件
   awk '$3~/[15]$/{print $1,$2}' reg.txt

  5.获取文件中有井号或空行的内容,将空行和井号信息的行排除
   第一步:先找出模式,有井号或空行内容
   awk '/#|^$/' reg.txt
   awk '$0~/#|^$/' reg.txt
注意:$0表示将文件所有列显示   默认也显示所有列
   第二步:按要求取反并显示出来
   awk '!/#|^$/' reg.txt
   awk '$0!~/#|^$/{print $0}' reg.txt 
注意:{print 0}也可以不加  默认显示所有

  6. 显示Xiaoyu的捐款,每个捐款数额都是以$开头, 如$110$220$330
  第一种:# awk -F "[: ]+" '$2~/Xiaoyu/{print "$"$4,"$"$5,"$"$6}' reg.txt
        $155 $90 $201                                    ---利用 ,与" "相同原理" "中为$就可以替换
第二种:# awk '$2~/Xiaoyu/{print $4}' reg.txt|sed 's#:#$#g'
        $155$90$201                                      ---利用sed  s###g
第三种:# awk '$2~/Xiaoyu/{print $4}' reg.txt|tr ':' '$'
        $155$90$201                                       ---利用tr 替换
第四种:# awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' reg.txt
        $155$90$201                                       ---利用gusb

awk替换
  gsub = gawk substitute
  使用格式:gusb(/要替换的信息/,"替换成什么",$将第几列)
  第一步:
  # awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' reg.txt
   $155$90$20                       ----第六题替换方法:
说明:$NF 表示文件的最后一列信息


06.awk命令模式分类
   普通模式:比较行信息  例:
  # awk 'NR<2' reg.txt                    ---显示第二行上面的所有行信息
   Zhang  Dandan    41117397    :250:100:175
   # 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
  Li     Youjiu    918391635   :175:75:300
  Lao    Nanhai    918391635   :250:100:175
  # awk 'NR==2' reg.txt                   ---显示第二行信息
   Zhang  Xiaoyu    390320151   :155:90:201

说明:NR 表示文件行信息


   取出多行内容  例:
  # awk 'NR==3,NR==5' reg.txt            ---,隔开表示取3-5行信息
   Meng   Feixue    80042789    :250:60:50
   Wu     Waiwai    70271111    :250:80:75
   Liu    Bingbing  41117483    :250:100:175
  # awk 'NR==3;NR==5' reg.txt            ---;隔开表示取3和5行信息
   Meng   Feixue    80042789    :250:60:50
   Liu    Bingbing  41117483    :250:100:175



特殊模式:
  BEGIN{动作}:在处理文件之前,先做什么事情  例:
  # awk 'BEGIN{print"姓","名","ID号","捐款记录"}{print $0}' reg.txt|column -t  
  姓     名        ID号        捐款记录
  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
   column -t用于对齐

   用于计算(+-*/^%)   例:
  # awk 'BEGIN{print 3+3}'
  6
  # awk 'BEGIN{print 3-3}'
0
  # awk 'BEGIN{print 3*3}'
  9
  # awk 'BEGIN{print 3/3}'
  1
  # awk 'BEGIN{print 3^3}'
  27
  # awk 'BEGIN{print 5%3}'
  2

 修改内置变量:
  NF: 取出最后一列
     # awk '{print $(NF-1)}' reg.txt      ---取出倒数第二列
  NR: 表示行信息
  FS: 指定列分隔符,默认识别空格为分隔符
     # awk 'BEGIN{FS="[: ]+"}{print $4}' reg.txt    
     # awk -vFS="[: ]+"  '{print $1,$4}' reg.txt   
    END{动作}:在处理文件之后,先做什么事情
 # 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
  学生捐款登记表
注意:格式要求 BEGIN{ }{匹配内容}END{ }  

应用:将统计后的最终结果进行输出


07.awk统计运算公式
   a 文本信息累加运算
     公式:i=i+1
     统计文件行数
   # awk '{i=i+1}END{print i}' reg.txt
   # awk '/oldboy/{i++}END{print i}' reg.txt 
      4
   b 数值信息求和运算
     公式:sum=sum+$n      $n代表要对文件第几列做求和运算
     例:
     # seq 10|awk '{sum=sum+$1}END{print sum}'
      55

   练习:找出secure日志中的faild信息,共出现多少次
        Windows文件传输到linux系统
  yum install -y lrzsz   ---实现数据传输功能
  rz                     ---将Windows数据传到linux系统
  sz                     ---将linux数据传到Windows系统 

 方法一:awk '/Failed/{i++}END{print i}' secure-20161219
 方法二:awk '$6~/Failed/{i++}END{print i}' secure-20161219'


08.知识梳理:
   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  
作业:
01. 如何完成求差运算  
公司 运营总金额  10000
张三 采购电脑花费  1000
李四 采购办公用品  250
王五 采购食品      330    
公司运营金额还剩多少

第一种:# awk '$3!~/10000/{print $3}' est.txt|awk 'BEGIN{sum=10000}{sum=sum-$0}END{print sum}'
第二种:# awk 'BEGIN{sum=10000}''$3!~/10000/{sum=sum-$3}END{print sum}' est.txt
02. 统计每一个失败IP地址次数, 进行排序显示,取出前3名
shell--awk数组
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容