linux文本处理三剑客之:awk(简单使用)

admin 2022年09月03日 532次浏览

awk 是一个非常优秀的数据处理工具,相较于 sed 常常作用于一整个行的处理,而 awk 则比较倾向于一行当中分成多个字段来处理。因此,awk 更适合处理小型的文本数据

1、awk 常用语法

  • 直接操作文件

    awk 选项 '条件类型1{动作1} 条件类型2{动作2} ...' 文件名
    
  • 对前面命令的输出进行处理

     command | awk 选项 '条件类型1{动作1} 条件类型2{动作2} ...'
    
  • 常用选项

    • -F:指明输入时用到的字段分隔符

awk 后面跟两个单引号并加上大括号 {} 来设置想要对数据进行的处理动作。awk 可以处理后续接的文件,也可以读取来自前面命令的标准输出,awk 主要是处理每一行的字段内的数据,而默认使用的字段分隔符为 “空格键” 或 “[tab]键” 。在 awk 的括号内,每一行的内容被分割成若干字段,从第一个字段开始,其变量名分别是 $1, $2… 等,$0代表整行数据

2、awk 的处理流程

  • 读入第一行,并将第一行的数据填入 $0, $1, $2… 等变量中

  • 根据 “条件类型” 的限制,判断是否需要进行后面的 “动作”

  • 做完当前行所有的动作与条件类型

  • 如果还有后续行的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止

3、awk 内置变量

变量名称 含义
NF 每一行 ($0) 拥有的字段总数
NR 目前 awk 所处理的是第几行的数据
FS 目前的分隔字符,默认是空格键
OFS 输出分隔符,默认为空白字符
FILENAME 当前文件名

4、awk常用操作

  • 查看passwd文件中用户对应的shell

    [root@localhost ~]# awk -F: '{print $1 "\t" $7}' /etc/passwd | head -5
    root	/bin/bash
    bin	/sbin/nologin
    daemon	/sbin/nologin
    adm	/sbin/nologin
    lp	/sbin/nologin
    
    # “-F:” 参数直接指定了使用冒号作为分隔符
    
  • 从前面命令标准输出中获取指定字段

    # 获取最近登录用户和对应的IP地址
    ## 这里对应的就是$1,$3
    [root@localhost ~]# last -5 | awk '{print $1 "\t" $3}'
    root	192.168.137.1
    root	192.168.137.1
    root	192.168.137.1
    root	192.168.137.1
    root	192.168.137.1
    

更多高级操作请参看官方文档或,man手册