• 文本处理工具awk


    一、工作原理:


     

    按行读取文件内容,对读取的内容按字段分割,形成若干字段,然后输出各字段的值

    awk认为文件都是结构化的,也就是说都是由单词和各种空白字符组成的,

    这里的“空白字符”包括空格、Tab,以及连续的空格和Tab等。

    每个非空白的部分叫做“域”,从左到右依次是第一个域、第二个域,等等。 $1、$2分别用于表示域,$0则表示全部域。

    eg:

    新建一个文本文件,输入以下内容

    john.wang male 20 220000
    lucy.zhang female 18 455525
    jack.chen male 15 55555566
    lily.gong female 15 56556653
    

    下面我们开始打印指定域

    非空白第一个域是姓名部分

     二、常用参数变量


     

    2.1 指定打印分隔符

    默认情况下awk是以空格为分隔符的,如果想要修改可以通过-F参数进行指定

    我们以 . 为分隔符进行分隔
    
    awk -F . '{print $1}' awk.txt
    

     -F 参数后面加分隔符号,不需要用引号引用分隔符号

    2.2 内部变量NF

    NF变量可以获取文件的列数,注意是每行的列数

    我们给最后一行新增一列 
    lily.gong female 15 56556653 4551
    
    awk  '{print NF}' awk.txt
    

     最后一行为5列,其他行都是4列,随着分隔符号的不同,打印出的列数可能是不同的

     2.3 打印固定域

    通过内部变量可以获取到每行的列数,如果在NF前加$就是打印最后一行

    如果是倒数第一行就是 $(NF-1)

     

     2.4 截取字符串

     可以使用substr()函数对指定域截取字符串

    substr用法

    substr(指定域,开始位置,结束位置)

    结束位置可以为空,这样默认输出该域的最后一个字符的内容

    awk '{print substr($1,1,2)}' awk.txt
    
    输出第一域的1到2的位置
    

    awk '{print substr($1,1)}' awk.txt 
    
    输出第一域的1到结尾的部分
    

     2.5 确定字符串的长度

    awk '{print length}' awk.txt
    
    可以查看总长度
    

     2.6 使用awk求列和

     awk 'BEGIN{total=0} {total+=$3} END{print total}' awk.txt
    

    对第三列的年龄进行求和

    执行前先BEGIN 定义变量和初始值

    执行变量加第三域

    执行结束后END 打印结果

  • 相关阅读:
    Spring阶段性学习:基础、配置解析、回调
    谈谈Spring对于@Configuration的Cglib代理
    IDEA使用Docker插件部署jar
    实用的IDEA插件
    Alibaba Cloud Toolkit插件部署jar
    谈谈Spring的ImportSelector和ImportBeanDefinitionRegistrar
    谈谈Spring的ConfigurationClassPostProcessor
    Mariadb使用总结
    分布式开放消息系统(RocketMQ)的原理与实践
    redis学习笔记
  • 原文地址:https://www.cnblogs.com/anyanpeng/p/14985784.html
Copyright © 2020-2023  润新知