• 操作系统三剑客命令-awk


    一.三剑客命令awk概念说明

      官方概念说明

      

    二.三剑客命令awk作用说明

      1.处理文件信息 : 擅长处理日志文件信息

      2.处理文件方式 :

        01.排除信息  02.查询信息  03.统计信息  04.替换信息

    三.三剑客命令awk语法原理

      1.命令语法格式

        01 . 标准格式

          sed  [参数]  '条件-处理方式'  文件

          awk  [参数]  '模式-动作'  文件

        02 . 模式说明

          匹配的条件信息

            普通模式:

              1.正则表达式作为模式

                awk '/^oldboy/{print $n}'

              2.利用比较匹配信息

                NR==2  NR>=2  NR<=2  NR==2,NR==10

             特殊模式: ******

              BEGIN{}

                概念说明:括号里面的内容会在awk读取文件之前执行

                awk 'BEGIN(print "姓","名","QQ号","捐款记录"){print $0}' awk_test.txt

                

                作用说明:

                  01.用于测试

                  02,用于计算

                  03.修改内置变量

                  

              END{}

                概念说明:括号里面的内容会在awk读取文件之后执行

                awk 'BEGIN(print "姓","名","QQ号","捐款记录"){print $0}END{print "end of life"}' awk_test.txt

                

                作用说明:

                  01.显示计算最终结果

                  02,用于计算

        03 . 内置变量

          FS(file separator-文件分隔符)     字段分割符变量               -F ":"==BEGIN{FS=":"}==-vFS=":"

          NR(number records(记录))       表示行数信息                  awk 'NR==1' awk_test.txt

          NF(number of fields(域))        表示每一行有多少列(调用即为最后一列)    awk '$2~/Xiaoyu/{print $NF}' awk_test.txt  

      2.命令执行过程

        

         与sed命令执行过程基本类似,也是从文件第一行,一行一行进行条件匹配,只不过有点区别是sed 会将模式空间中的内容输出到屏幕上,而awk不会, awk会看满足条件的行是否有动作,再决定是否将信息输出到屏幕上

    四.三剑客命令awk实践操作

      1.实践环境创建

      2.命令操作实践

        01.查询实践

          001.查找实践参数

            指定列的分隔符号(参数)    -F ":"    ---- 指定以 : 为分隔符

            显示指定行号信息(模式)    NR==n   ---- 第 n 行信息

            显示指定列的信息(动作)    print     ---- 将信息打印到屏幕上

                             gsub    ---- 对显示出信息进行替换操作

          002.查找案列说明

            按行查找文件数据信息

              awk 'NR==1' awk_test.txt

            按字符查找文件数据信息

              awk '/155/' awk_test.txt

            按行按列查找文件数据信息

              awk 'NR==1{print $1 $2}' awk_test.txt

              awk -F "[ :]+" 'NR==1{print $1 $2 $(NF-1)}' awk_test.txt

                [ :]+   以空格和:作为分隔符  +的意思是将连续的空格或: 看做一个整体

                (NF-1)  NF意为最后一个字符.NF-1即为倒数第二行

              awk '$3~/0+/' awk_test.txt

                $3    第三列

                ~       表示匹配或者包含什么信息

                !~    表示不匹配或者不包含什么信息

              

        02.查询测验

          001.按照行号查询信息

            awk 'NR==1' awk_test.txt      查找单行信息

            awk 'NR==1,NR==3' awk_test.txt    查找连续多行信息

            awk 'NR==1;NR==3' awk_test.txt    查找不连续多行信息

            

          002.显示字符查询信息

            awk '/Xiaoyu/' awk_test.txt        查找单行信息

            awk '/Xiaoyu/,/Waiwai/' awk_test.txt    查找连续多行信息

            awk '/Xiaoyu/;/Waiwai/' awk_test.txt    查找不连续多行信息

            

           003.显示Xiaoyu的姓氏和id号码

            1.条件:  找出Xiaoyu所在行

            2.动作:  显示此行指定列的信息 print 

            3.思路:  按照Xiaoyu找出对应行,利用{print  $n,$m} 匹配多列 将信息打印出来  

            4.实践:  awk '/Xiaoyu/{print $1","$3}' awk_test.txt

            

          004.姓氏是Zhang的人,显示他的第二次捐款金额及他的名字

            1.条件:  找出姓氏是Zhang的所在行信息

            2.动作:  显示当前行指定列的信息

            3.思路:  按照Zhang找出所在行并列出最后一列,观察列出的列是以 :为分割符的, 利用-F参数.将:分割的列再进行分列.找出第二次捐款的信息,将两条命令合并,将分割符也合并.注意合并分割符的时候用  "[ ]"  ,因为每列之间的空格往往很多没办法判断,此时加个+ 意为将多个连续的空格看成一个分割符, 再将所需要的信息列出

            4.实践:  awk -F "[ :]+" '/Zhang/{print $1,$2,$(NF-1)}' awk_test.txt

            

          005.显示所有以41开头的id号码的人的全名和id号码

            1.条件:  显示以41开头的id号  id号码在当前文件的第三列  考虑利用  ~ 匹配信息

            2.动作:  显示当前列所在行的指定信息

            3.思路:  利用~的作用匹配第三列满足特定条件的信息

            4.实践:  awk '$3~/^41/{print $1,$2,$3}' awk_test.txt

            

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

            1.条件:  显示指定列以1或5结尾  利用~匹配特定条件,条件中运用  |  匹配多个条件    

            2.动作:  显示当前行所在列的信息  column -t  将显示的信息列纵队. 即对齐

            3.思路:  ~ 对第三列进行最后一个字符条件匹配   | 连接多个或者关系条件   [] 多个条件存在或者关系

            4.实践:  awk '$3~/1$|5$/{print $1,$2}' awk_test.txt | column -t

                  awk '$3~/[15]$/{print $1,$2}' awk_test.txt | column -t

            

          007.显示Xiaoyu的捐款,每个捐款前面都以$开头,如$110$220$330

            1.条件:  按照字符找出对应行信息

            2.动作:  显示捐款信息,再数值前赋值$  利用gsub的替换功能  --- gsub(/需要替换的信息/,"修改成什么信息",$n-操作那一列)

            3.思路:  找出第二列指定字符的是Xiaoyu的行并打印最后一列,对打印出来的列,进行额外的动作,执行gsub替换,把 : 替换成$符号    注意 gusb是个动作,需要跟print放到一起,又因为是两个不同的指令,所以中间需要用 ; 分割开

            4.实践:  awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt

            

          008.文件中空行/注释行进行排除

            1.条件:  按照条件找出对应行

            2.动作:

            3.思路:  $0  即意为全部信息     /^$|^#/  空行和以#开头的信息.    $0!   取反,即不需要匹配出来的信息

            4.实践:  awk '$0!~/^$|^#/' awk_test.txt

            

        总结:awk命令中$符号的用法

         $1 $2 $3 :   取第几列信息
            $NF        :   取最后一列
            $(NF-n)  :   取倒数第几列
            $0           :   取所有列的信息

        03.特殊模式:特殊模式应用案例

          1.统计/etc/services中空行数量

           

           

          2.统计/etc/services文件中有#开头的行

           

          2.统计/etc/passwd文件中有多少普通用户  虚拟用户

           步骤一:用户信息存放文件  /etc/passwd 

           步骤二:从文件中匹配出虚拟用户 普通用户  普通用户是/bin/bash 结尾的   awk '$NF~/bash/' /etc/passwd

           步骤三:进行统计    awk '$NF~/bash/{i++}END{print i}'  /etc/passwd

           

          3.统计文件中的数值的和

           sum=sum+$n(需要进行数值求和的列)

              

    五.三剑客命令awk数组详述

      1.数组知识学习准备 :  统计计算方法说明

        i=i+1:

          步骤一: 先计算右边,将右边数值给左边变量

          步骤二: i=0  i=0+1  i=1+1    .....    统计次数

        列:  awk '/^$/{i=i+1;print i}' /etc/services
               awk '/^$/{i++;print i}' /etc/services

        i=i+$0:

          步骤一: 表示对每行的数字进行累加求和运算

          步骤二: i=0 i=0+$0 i=$0(上一行)+$0       求和运算

        列:  seq 10|awk '{sum=sum+$n;print $n,sum}'      $n  指定想把第几列信息做求和运算       

      2.数组概念知识说明

        数组形式说明        

          hotel[110]="张三"
             hotel      数组名称
               [110]       数组元素
               "张三"     元素内容    

        数组实际应用        

         awk 'BEGIN{h[110]="UFO";h[114]="XO";print h[110],h[114]}'
            awk -F "[/.]+" '{h[$2]++}END{for(pol in h) print pol,h[pol]}' url.txt

  • 相关阅读:
    排序函数
    Wooden Sticks
    Tian Ji -- The Horse Racing
    error
    Java学习笔记七——数组工具类Arrays
    java学习笔记六——数组
    Java学习笔记五——流程控制
    Java学习笔记四——运算符
    Java学习笔记三——数据类型
    Java学习笔记二——标识符和关键字
  • 原文地址:https://www.cnblogs.com/zp751060301/p/12906392.html
Copyright © 2020-2023  润新知