• linux--awk


    awk 命令可以用来过滤文本,简单理解就是对文本的每行执行命令awk指定的脚本.

    基本命令格式如下:

    awk [选项] '条件{编辑指令}' 文件
    
    • 1

    选项

    -F 指定分隔符,可省略-F (默认空格或Tab位)
    处理文本时,若未指定分隔符,则默认将空格、制表符等作为分隔符。print是最常见的指令。
    🐖 编辑指令如果包含多条语句时,可以用分号分隔, eg:

    awk -F: '{$1="Description:"; print $0}' test.txt
    
    • 1

    eg:

    cat test.txt 
    # 
    a:bb:ccc:d
    1:2::@:4
    # 运行命令,输出:
    Description: bb ccc d
    Description: 2  @ 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    🐖 -F:指定“:”为字段分隔符

    数据字段变量

    $0表示整行文本
    $1表示文本行中第一个数据字段
    $n表示文本行中第n个数据字段

    awk '{print NR}' 1.txt
    
    • 1

    🐖 只打印行号,不显示文本内容
    🐖:NR: Number of Record (记录数) ,$NR 暂时未明白??

    打印每行的文本:

    awk '{print $0}' 1.txt
    
    • 1

    打印每行,并为每行带上行号:

    awk '{print NR":",$0}' 1.txt
    
    • 1

    🐖 NR : 表示记录数,在执行过程中对应于当前的行号
    🐖 NR":",$0是满足print语法的写法

    打印每行的第1列(默认用空格分离):

    awk '{print $1}' 1.txt
    
    • 1

    打印每行的最后1列(默认用空格分离):

    awk '{print $NF}' 1.txt
    
    • 1

    🐖 NF : 表示字段数,NF: Number of Field (字段数)在执行过程中对应于当前的字段数$NF :表示最后一个字段的内容 [从左往右]

    打印每行的倒数第2列(默认用空格分离):

    awk '{print $(NF-1)}' 1.txt
    
    • 1

    用awk打印除第一列之外的所有列

    awk '{for(i=2;i<=NF;++i) print $i}' test.txt
    或者awk '{for(i=2;i<=NF;++i) printf $i ;printf "\n"}' test.txt
    
    • 1
    • 2

    🐖shell中的print和printf的区别:

    • print按照默认的分隔符打印一个或多个变量或常量(字符串),末尾自动换行;
    • printf可以格式化后输出每个变量,(可以控制打印位置、分割、占位宽度、数值的显示方式、位数等),末尾不会自动换行,如需换行需要在printf第一个格式字符串参数末尾使用“\n”

    在处理数据之前运行脚本

    awk默认每次读入一行数据,然后用脚本进行处理。如果想在处理文本之前预处理一些命令,可以用BEGIN关键字指定。用END关键字在处理完所有数据后,再运行善后处理工作。

    awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file
    
    • 1

    其中:

    • BEGIN{ commands } 指定最开始执行的脚本
    • pattern{ commands } 对文件的每一行遍历,判断是否满足pattern的模式,如果满足则执行脚本
    • END{ commands } 指定最后执行的脚本

    eg:打印“开始”,打印每行,打印“结束”:

    awk 'BEGIN{ print "开始" } { print } END{ print "结束" }' 1.txt
    
    • 1

    输出

    awk ‘{print $1$2}’ 表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)连接在一起输出。
    awk ‘{print $1 $2}’ 表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)以默认输出分隔符”空格“隔开后显示。
    awk ‘{print $1,$2}’ 表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)以输出分隔符“,”隔开后显示。

  • 相关阅读:
    物联网开发笔记(28)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示图片(ST7789芯片)
    pg_rman 的编译和使用
    EtherCAT从站EEPROM分类附加信息详解:SM(同步管理器)
    Leetcode:最接近的三数之和
    USB复合设备构建CDC+HID鼠标键盘套装
    ES6 模块化编程 详解
    《uni-app》表单组件-Label组件
    LeetCode | 只出现一次的值(python解法)
    jquey+mybatis-plus实现简单分页功能
    Element-UI+Vue实现开发权限
  • 原文地址:https://blog.csdn.net/qq_40855100/article/details/127429287