• 【Linux】awk命令简单用法


    简介

    awk是GNU项目开发的一个强大的文本处理工具。它主要用于读取输入(通常为文本文件),根据某些条件匹配每一行,然后对匹配的行执行指定的操作。

    基本用法

    awk的基本用法如下:

    # 格式
    $ awk 动作 文件名
    
    # 示例
    $ awk '{print $0}' demo.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面示例中,demo.txtawk所要处理的文本文件。前面单引号内部有一个大括号,里面就是每一行的处理动作print $0。其中,print是打印命令,$0代表当前行,因此上面命令的执行结果,就是把每一行原样打印出来。

    下面,我们先用标准输入(stdin)演示上面这个例子。

    $ echo 'this is a test' | awk '{print $0}'
    this is a test
    
    • 1
    • 2

    上面代码中,print $0就是把标准输入this is a test,重新打印了一遍。

    awk会根据空格和制表符,将每一行分成若干字段,依次用$1$2$3代表第一个字段、第二个字段、第三个字段等等。

    $ echo 'this is a test' | awk '{print $3}'
    a
    
    • 1
    • 2

    上面代码中,$3代表this is a test的第三个字段a

    下面,为了便于举例,我们把/etc/passwd文件保存成demo.txt

    root:x:0:0:root:/root:/usr/bin/zsh
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这个文件的字段分隔符是冒号(:),所以要用-F参数指定分隔符为冒号。然后,才能提取到它的第一个字段。

    $ awk -F ':' '{ print $1 }' demo.txt
    root
    daemon
    bin
    sys
    sync
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    变量

    除了$ + 数字表示某个字段,awk还提供其他一些变量。
    变量NF表示当前行有多少个字段,因此$NF就代表最后一个字段。

    $ echo 'this is a test' | awk '{print $NF}'
    test
    
    • 1
    • 2

    $(NF-1)代表倒数第二个字段。

    $ awk -F ':' '{print $1, $(NF-1)}' demo.txt
    root /root
    daemon /usr/sbin
    bin /bin
    sys /dev
    sync /bin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上面代码中,print命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。

    变量NR表示当前处理的是第几行。

    $ awk -F ':' '{print NR ") " $1}' demo.txt
    1) root
    2) daemon
    3) bin
    4) sys
    5) sync
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上面代码中,print命令里面,如果原样输出字符,要放在双引号里面。

    awk的其他内置变量如下。

    FILENAME:当前文件名
    FS:字段分隔符,默认是空格和制表符。
    RS:行分隔符,用于分割每一行,默认是换行符。
    OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
    ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
    OFMT:数字输出的格式,默认为%.6g。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    浙江大学数据结构陈越 第一讲 数据结构和算法
    gradle目录结构,项目目录结构
    使用信号量实现简单双向同步
    面试官:Redis如何实现持久化的、主从哨兵又是什么?
    高德地图2.0使用SvgMarker.Shape.IconFont方法将iconfont矢量图作为图标
    大佬公司的github地址
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java智慧小区综合管理平台q1033
    【Linux安全之iptables的target】
    10月27日,每日信息差
    Air实现Go程序的热重载(热加载)
  • 原文地址:https://blog.csdn.net/u011308433/article/details/132902948