zoukankan      html  css  js  c++  java
  • awk命令使用实例

    Awk是为高级文本处理而设计的通用脚本语言。它主要用作报告和分析工具。本文介绍awk在命令行中操作文本的使用方式。

    Awk一次对一条记录进行操作,直到到达输入的末尾。记录由一个称为记录分隔符的字符分隔。默认的记录分隔符是换行符,这意味着文本数据中的每一行都是一个记录。

    每条记录中的字段由$后跟字段号(以1开头)引用。第一个字段用$1表示,第二个字段用$2表示,依此类推。最后一个字段也可以用特殊变量$NF引用。整个记录可以用$0引用。

    Awk模式

    Awk支持不同类型的模式,包括正则表达式、关系表达式、范围和特殊表达式模式。

    在下面的例子中,将创建一个名为“ teams.txt”的文件,文件内容如下:

    [root@localhost ~]# cat teams.txt
    
    Bucks Milwaukee    60 22 0.732 
    Raptors Toronto    58 24 0.707 
    76ers Philadelphia 51 31 0.622
    Celtics Boston     49 33 0.598
    Pacers Indiana     48 34 0.585
    
    正则表达式模式

    Awk的正则表达式模式用斜线(//)包含起来,例如:要显示包含“0.5”的每条记录,可以运行以下命令

    [root@localhost ~]# awk '/0.5/ {print $0}' teams.txt 
    Celtics Boston     49 33 0.598
    Pacers Indiana     48 34 0.585
    

    awk命令使用实例awk命令使用实例
    要显示包含“0.5”的每条记录的第一个和第二个字段:

    [root@localhost ~]# awk '/0.5/ {print $1,$2}' teams.txt 
    Celtics Boston
    Pacers Indiana
    

    awk命令使用实例awk命令使用实例
    显示一个或者多个数字开头的记录,并打印第一列:

    [root@localhost ~]# awk '/^[0-9]/ {print $1}' teams.txt 
    76ers
    

    awk命令使用实例awk命令使用实例

    关系表达式模式

    关系表达式模式通常用于匹配特定字段或变量的内容。
    常用的关系运算符有:

    • ~:包含
    • !~:不包含
    • >:大于
    • <:小于
    • >=:大于等于
    • <=:小于等于
    • =:等于
    • !=:不等于

    使用~“包含”比较运算符。例如,显示第二个字段中包含“ia”字符的每条记录:

    [root@localhost ~]# awk '$2 ~ /ia/ {print $0}' teams.txt 
    76ers Philadelphia 51 31 0.622
    Pacers Indiana     48 34 0.585 
    

    awk命令使用实例awk命令使用实例
    若要匹配不包含给定字符的记录,可以使用!~不包含操作符。例如,显示第二个字段中不包含“ia”字符的每条记录:

    [root@localhost ~]# awk '$2 !~ /ia/ {print $0}' teams.txt 
    Bucks Milwaukee    60 22 0.732 
    Raptors Toronto    58 24 0.707 
    Celtics Boston     49 33 0.598 
    

    使用!=“不等于”操作符,
    awk命令使用实例awk命令使用实例
    使用>=“大于等于”操作符,显示第四个字段大于等于30的记录:

    [root@localhost ~]# awk '$4 >= 30 {print $0}' teams.txt 
    76ers Philadelphia 51 31 0.622
    Celtics Boston     49 33 0.598
    Pacers Indiana     48 34 0.585
    

    awk命令使用实例awk命令使用实例

    范围模式

    范围模式由逗号分隔的两组字符组成,从与第一个字符串匹配的记录开始,直到与第二个字符串的记录匹配为止的所有记录。

    例如,显示从“Raptors”到 “Celtics”在内的记录,:

    [root@localhost ~]# awk '/Raptors/,/Celtics/ {print $0}' teams.txt 
    Raptors Toronto    58 24 0.707 
    76ers Philadelphia 51 31 0.622
    Celtics Boston     49 33 0.598
    

    awk命令使用实例awk命令使用实例
    范围模式也可以使用关系表达式,例如,显示第四个字段等于31到第四个字段等于34 的记录:

    [root@localhost ~]# awk '$4 == 31 , $4 == 34 {print $0}' teams.txt 
    76ers Philadelphia 51 31 0.622
    Celtics Boston     49 33 0.598
    Pacers Indiana     48 34 0.585
    

    awk命令使用实例awk命令使用实例

    特殊表达式模式

    Awk包括以下特殊模式。

    • BEGIN:在处理记录之前执行此操作。
    • END:用于在处理记录之后执行此操作。

    BEGIN模式通常用于设置变量,END模式用于处理统计的数据。例如,下面将显示“Start Processing.”,然后显示第三个字段,最后显示”End Processing.”:

    [root@localhost ~]# awk 'BEGIN {print "Start Processing."};{print $3};END {print "End Processing."}' teams.txt 
    Start Processing.
    60
    58
    51
    49
    48
    End Processing.
    

    awk命令使用实例awk命令使用实例

    内置变量

    Awk有许多内置变量,允许控制程序的处理方式。下面是一些常见的内置变量:

    • NF:记录中的字段数
    • NR:当前记录的编号
    • FILENAME:当前正在处理的输入文件名称
    • FS:字段分隔符
    • RS:记录分隔符
    • OFS:输出字段分隔符
    • ORS:输出记录分隔符

    下面是一个显示如何打印文件名和行数的示例:

    [root@localhost ~]# awk 'END {print "File" , FILENAME , "contains" , NR , "lines."}' teams.txt 
    File teams.txt contains 5 lines.
    
    总结

    Awk是最强大的文本处理工具之一。

    本文原创地址:https://www.linuxprobe.com/awk-cmd-example.html编辑:逄增宝,审核员:逄增宝

  • 相关阅读:
    启动ASM 数据库的步骤
    ora15031 DBCA找不到ASM磁盘组
    ORA12514 解决方法
    Rhel Linux 5.1 (32 位)上安装 Oracle ASM数据库 11g 第 1 版
    Oracle ASM for linx as 4 x8664 创建过程
    在安腾AI64 RHEL3 U3服务器上安装ORACLE10G
    ora12528 : message 12528 not found; product=RDBMS ; facility=ora
    linux下启动oracle服务和监听程序
    linux内核升级RPM包安装问题!!!!
    AS4 下安装Oracle 10g(ASM & RAW)
  • 原文地址:https://www.cnblogs.com/linuxprobe/p/13805612.html
Copyright © 2011-2022 走看看