• Linux文本处理工具awk用法总结


    awk是一种文本处理工具,它逐行读取输入文本,根据用户提供的模式匹配特定的行,然后执行对应的动作来处理匹配到的行。

    在处理过程中,awk 将文本行分割成多个字段,并提供了丰富的内置函数和控制结构来处理和操作这些字段。

    最后,awk将处理结果输出到标准输出或指定的输出文件。

    简而言之,awk的原理是通过模式匹配、字段分割和动作执行来处理文本数据。

    一. 基本语法

    awk [options] 'pattern {action}' [file...]

    options:awk的选项,用于控制其行为。常用选项包括-F(指定字段分隔符)和-v(定义变量)等。

    pattern:模式,用于匹配输入数据的某些行。可以是正则表达式或比较操作。

    {action}:动作,用于对匹配到的行进行处理。可以是打印、赋值、计算等操作。

    二. 支持功能

    1. 列处理

    awk以列为单位处理文本数据,可以对列进行选择、提取、操作和计算等。

    可以使用$符号来引用不同的列,例如$1表示第一列,$2表示第二列,以此类推。

    2. 行处理

    awk可以按行读取输入文件,并根据指定的条件对行进行匹配和处理。

    使用正则表达式来匹配行,或者使用关系运算符对行进行筛选。

    3. 条件语句

    支持if-else条件语句,根据条件执行不同的动作,使用关系运算符、逻辑运算符和正则表达式来构建条件。

    4. 循环结构

    支持for和while循环结构,对数据进行迭代处理,循环结构与条件语句结合使用,实现更复杂的数据处理逻辑。

    5. 数组操作

    支持数组,将数据存储在数组中,并通过索引进行访问和操作,使用数组来实现一些统计和计数的操作。

    6. 内置函数

    提供了许多内置函数,用于处理字符串、数值和日期等数据。

    例如,length()函数用于计算字符串长度,substring()函数用于提取子字符串,split()函数用于拆分字符串等。

    7. 格式化输出

    提供了printf()函数,用于格式化输出,使用格式化字符串来控制输出的格式,包括字段宽度、精度、对齐方式等。

    8. 文件处理

    可处理多个文件,按顺序处理多个输入文件的数据,也能使用通配符来匹配多个文件。

    9. 命令行参数

    接受命令行参数,并将其作为变量在脚本中使用,使用-v选项来定义变量,或使用ARGV数组来访问命令行参数。

    10. 正则表达式

    支持使用正则表达式进行模式匹配和替换,如使用~运算符进行匹配操作,使用sub()或gsub()函数进行替换操作。

    11. 文件内容修改

    可直接修改文件内容,使用-i选项可以直接在原始文件上进行修改,而不是将结果输出到标准输出。

    12. 输入输出重定向

    支持输入输出重定向,可以从文件中读取数据,也可以将结果输出到指定的文件中,方便地处理大量的数据文件,并将结果保存在文件中。

    三. 应用场景

    适用于各种需要对文本数据进行处理、提取、转换和分析的场景,无论是处理小型文本文件还是大型日志数据,awk都可以轻松地完成任务。

    四. awk常用表达式

    1. 模式匹配

    模式匹配可以使用简单字符串或正则表达式来匹配文本行。

    例如,/pattern/表示匹配包含特定模式的行。

    2. 条件表达式

    条件表达式用于在动作中执行特定的操作,常见的条件表达式包括比较运算符(如<、>、==、!=等)和逻辑运算符(如&&、||)。

    例如,$2 > 10表示第二个字段大于10的条件。

    3. 算术表达式

     算术表达式用于处理数字数据,使用常见的算术运算符(如+、-、*、/等)对数字进行加减乘除运算。

    例如,$3 * 0.1表示将第三个字段乘以0.1的结果。

    4. 字符串拼接

    使用""来拼接字符串,例如,"Hello, " $1表示将字符串"Hello, "和第一个字段拼接起来。

    5. 内置变量

    awk提供了许多内置变量,可以在表达式中使用。

    NR表示当前行号,NF表示当前行的字段数量,$0表示整行文本。

    例:

    输出行号和行内容

    awk '{ print NR, $0 }' file.txt

    输出行号和字段数量的信息

    awk '{ print "Line", NR, "has", NF, "fields." }' file.txt

  • 相关阅读:
    【工具门户】Linux平台安装Backstage(二)
    MapReduce Shuffle源码解读
    基站天线交叉极化比测量的不确定度评定
    Docker安装Bitbucket
    字符串函数(二)—— 长度受限制的字符串函数
    【JAVA程序设计】(C00083)基于SSM+uniapp好物分享小程序及管理系统-有文档
    若依vue ruoyi-vue ant design版本使用
    GStreamer安装——iOS
    DDD概念复杂难懂,实际落地如何设计代码实现模型?
    LVS -DR
  • 原文地址:https://blog.csdn.net/weixin_50764555/article/details/134527630