• SHELL脚本学习(十三)初识 gawk 编辑器


    概述

    gawk提供了一种编程语言,而不仅仅是编辑器命令。
    在gawk语言中,可以实现如下操作:

    • 定义变量保存数据
    • 使用算数和字符串运算符处理数据
    • 使用结构化编程概念 为数据处理添加处理逻辑
    • 提取文件中的数据并将其重新排列组合,最后生成格式化报告

    一、gawk命令格式

    gawk options program file

    gawk的可用选项
    选项描述
    -F fs指定字段分隔符
    -f file指定脚本文件
    -v var=value定义gawk脚本中的变量及默认值
    -L [keyword]执行兼容模式或警告级别

    gawk的强大之处在于脚本,你可以编写脚本来读取文件中的数据,然后对其进行处理并显示,形成各种输出报告。

    二、从命令行读取gawk脚本

    gawk脚本用一对花括号定义,必须将命令放到花括号之间。
    由于gawk命令行假定脚本是单个文本字符串,因此还必须将脚本放到单引号中。

    $ gawk '{print "hello world"}'
    sadas
    hello world
    

    脚本定义了一个命令 print,它会将输出打印到STDOUT。
    因为没有指定文件,所以它一直等待STDIN的输入。无论输入什么,都会打印 hello world。按ctrl+D结束执行。

    三、使用数据字段变量

    gawk会为每一行的各个字段分配一个变量。默认情况下,gawk会将下列变量分配给文本行中的数据字段。

    • $0 代表整个文本行
    • $1 代表第一个字段
    • $2 代表第二个字段
    • $n 代表第n个字段
    $ cat <data1
    header line
    data line 1
    End of data line
    
    $ gawk '{print "first="$1 " second="$2}' data1
    first=header second=line
    first=data second=line
    first=End second=of
    

    四、在脚本中使用多条命令

    要在命令行指定的脚本中使用多条命令,只需在命令间加分号即可。

    $ cat <data1
    header line
    data line 1
    End of data line
    
    $ gawk '{$1="replacement";print $0}' data1
    replacement line
    replacement line 1
    replacement of data line
    

    这个脚本先将第一个字段改成 replacement,再显示整行文本。

    五、从文件中读取脚本

    gawk允许将脚本保存在文件中,然后在命令行中引用脚本。

    
    $ cat <gawk_cmd
    {print $1="replacement"  " "$0}
    
    $ gawk -f ./gawk_cmd data1
    replacement header line
    replacement data line 1
    replacement End of data line
    
    

    六、处理数据前执行脚本

    gawk会在读取数据前 执行 BEGIN指定的脚本

    $ cat <gawk_cmd
    BEGIN {
        print "Replacement result:"
    }
    
    {print $1="replacement"  " "$0}
    
    $ gawk -f ./gawk_cmd data1
    Replacement result:
    replacement header line
    replacement data line 1
    replacement End of data line
    

    七、处理输出后执行脚本

    END关键字允许指定一个脚本,gawk会在处理完数据之后执行这个脚本。

     cat <gawk_cmd
    BEGIN {
        print "Replacement result:"
    }
    
    {print $1="replacement"  " "$0}
    
    END {
        print "End of file"
    }
    
    $ gawk -f ./gawk_cmd data1
    Replacement result:
    replacement header line
    replacement data line 1
    replacement End of data line
    End of file
    
  • 相关阅读:
    java计算机毕业设计ssm齐市疫苗管理系统w80jw(附源码、数据库)
    python中统计计数的几种方法+ 统计label个数
    Charles简单压力测试
    vue项目npm install报错解决
    python wechat --- 企业微信机器人API
    LrC & ACR :优化的 AI 天空蒙版
    自动抓取app数据的攻与防
    基于Django+node.js+MySQL+杰卡德相似系数智能新闻推荐系统——机器学习算法应用(含Python全部工程源码)+数据集
    Java基于SSM的校园一卡通系统设计与实现
    算法训练——双指针专题
  • 原文地址:https://blog.csdn.net/weixin_37703001/article/details/140054465