linux awk命令

awk命令

  命令作用:

    awk命令的主要作用是对文本文件进行处理。

  语法格式:

    awk [参数] [处理规则] [操作对象]

  处理规则的流程:

    处理规则的流程由先到后分别为 BEGUN{},//,{},END{}

      BEGIN{}:指的是开始时执行

      //:表示正则表达式

      {}:表示循环

      END{}:表示处理结束时执行

  生命周期:

    1.从处理文件中读取一行数据

    2.将读取的数据进行分解

    3.根据处理规则处理数据

    4.将处理好的数据复制给$0,直至处理结束。

    5.如果有END{}处理规则则执行

    grep、sed和awk的处理过程相似,都是读一行就处理一行直至结束。

    优点在于在处理大文件时节省内存。

  awk中的预定义变量:

    $0:完整的输入记录

    $n:当前记录的第n个字段

    NF:当前记录的字段数

    NR:已读取的行的数量,也就是行号

    FS:指定分隔符,默认是空格

    OFS:指定输出字段分隔符,默认值也是空格

  awk中的格式化输出

    格式化输出命令:printf

      %s:表示字符串

      %d:表示数字

      -  :表示左对齐

      +  :表示右对齐

      n  :表示占用n个字符长度(当超过字符长度时会失效)

    案例:显示第一个字段和最后一个字段,左对齐,占用5个字符

 

 

 

  awk中的参数

    -F:指定分隔符,默认是空格

      当同时以FS指定分隔符时,优先使用FS。

 

    案例:输出行号,第一列和最后一列的内容,行号后加&&,第一列后加||

 

 

 

  awk中的定位方式

    1.正则表达式

      正则表达式表示使用正则表达式来定位的方式

 

 

 

    2.条件表达式

      条件表达式表示使用运算符(如>,<,=等)或其他条件来定位数据的方式。

      当比较的是字母时比较的是ASCII码

      特殊的:~表示使用正则表达式,!~表示取反  

      案例:输出第三列比第四列大的行

 

 

 

    3.逻辑表达式

      逻辑表达式表示利用逻辑运算来定位数据

      字符:

        &&:逻辑与

         | | :逻辑或

        ! :逻辑非

      案例:输出首列字母为a或者第二列字母为w的行

 

 

 

    4.算数表达式

      算数表达式表示使用算数运算符(如+,-,/,*)来定位数据

      案例:打印奇数行

 

 

    5.范围表达式

      范围表达式表示选择从满足第一条正则表达式的行到满足第二条正则表达式的行

      案例:打印从a开头的行到h的行

 

 

  流程控制

    流程控制指条件语句与循环语句,他们只能在循环{}中使用。

    1.if语句

      if语句表示判断,根据条件分为三种语句格式:

        单分支:if(){}

        双分支:if(){}else{}

        多分支:if(){}else if(){}...else{}

      案例:如果是以a开头的行就输出整行,如果是q开头的行就输出行尾,否则就输出!号

 

 

    2.for语句

      for语句表示当满足条件时循环打印。

      应注意不要变成死循环。

      格式:for(变量赋值;条件判断;变量值变化){}

      案例:将文件内每行打印3次

 

 

    3.while语句

      while语句与for类似,也是循环语句的判断

      格式:while(条件判断){}

      案例:将文件的每行打印3次

 

posted @   临江沂水  阅读(123)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示