AWK命令的使用方法

格式:

    1.不加选定列默认输出一整行

        awk '{print $0}' <text> #$0表示输出一整行。每一行的内容都存储在内置变量 $0 中。

        awk '{print $1}' <text> #输出第一列(列的下标从1开始)

    2.大括号 {} 在 AWK 程序中用于定义一个动作块,即对于符合特定模式的每一行,都会执行大括号内的指令。

    3.BEGIN 关键字:在处理任何输入行之前执行,只执行一次但可以有多个BEGIN,常用于初始化变量或打印标题等:

        awk 'BEGIN { print "Header" } { print $0 }' filename

    4.END 关键字用于定义一个在所有输入行都处理完成后执行的动作块。这常用于执行总结性的计算或最终的输出。END 块在 AWK 处理完输入文件的所有行之后执行,只执行一次但可以有多个END。

        awk '{ total += $1 } END { print "Total:", total }' numbers.txt

匹配方法:

    1)字段匹配

        通过测试字段值来选择行。例如,匹配第二个字段等于特定值的行:awk '$2 == "some_value" { print $0 }' filename

    2)范围匹配

        使用范围操作符 , 来匹配位于两个模式之间的所有行,包括与这两个模式匹配的行。例如,从匹配 "start" 的行开始,到匹配 "end" 的行结束:

            awk '/start/, /end/ { print $0 }' filename

    3)复合条件匹配

        使用逻辑操作符如 &&(与)、||(或)和 !(非)来组合多个条件。例如,选择第一个字段大于 10 且第二个字段小于 20 的行:

            awk '$1 > 10 && $2 < 20 { print }' filename

    4)行号匹配:

        awk 'NR > 1 {print $1}' <text> #从第一行开始匹配(行数下标从0开始)

    5)算术与字符串表达式:可以在模式匹配中使用算术比较和字符串操作,例如匹配总和或字符串拼接的结果:

        awk 'length($0) > 80 { print }' filename  # 打印长度超过80字符的行

    6)动态正则表达式:

        使用变量构建正则表达式,动态匹配行。例如,根据用户输入的模式匹配行:

            awk -v pattern="$user_pattern" '$0 ~ pattern { print }' filename

            v pattern="$user_pattern": 使用 -v 选项来定义一个名为 pattern 的 AWK 变量,并将其值设置为 shell 变量 $user_pattern 的当前值。这里假设 $user_pattern 已经在 shell 环境中定义并赋值。

            '$0 ~ pattern { print }':。这是一个正则表达式匹配测试。~ 是 AWK 中的匹配运算符,用于测试左边的字符串(这里是整行文本 $0)是否匹配右边的正则表达式(这里是变量 pattern)。

常用选项:

-F 用于指定分隔符

    cat /etc/passwd | awk -F ':' 'NR==1 {print $1}'

    等价于:cat /etc/passwd | awk -v FS=':' 'NR==1 {print $1}' #-F的作用就是把FS变量设置为指定的字符

-f 从脚本文件中读取awk命令

-v 定义或修改一个awk内部的变量

常用变量:

    $0: 表示一整行

    NR:行号,下标从0开始(表示当前行号的变量)

    NF:当前记录中的字段数量。(表示最后一列)

    FS:输入的分隔符,默认为空格

    OFS:输出的分隔符,默认为空格

    RS: 记录分隔符(输入换行符),默认是换行符。

    ORS: 记录分隔符(输出换行符),默认是换行符。

    FNR:各文件分别计数的行号。awk可以同时处理多个文件,NR会持续累加,FNR会在文件切换后重新计数。

    FILENAME:当前文件名

    ARGC:命令行参数的个数

    ARGV:保存传递给awk命令的参数数组,使用AGRV[<index>]可以获取参数的值。默认ARGV[0]=awk

注意事项:

    1.print $n,表示输出的n列的值,print n表示输出n的值

    2.变量名称必须大写。

 

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值