作者信息:https://home.cnblogs.com/u/huangjiabobk

在运维日常工作,"awk"的日常使用规范有哪些?

awk 是一个强大的文本处理工具,最初用于 Unix 系统,现在也可以在类 Unix 系统(如 Linux 和 macOS)上使用。它允许你执行复杂的文本处理任务而不需要编写完整的程序。下面是一些基本概念以及 awk 的使用规则:

基本语法

awk 命令的基本形式是:

awk 'pattern {action}' [file ...]
  • pattern 定义了一个模式,用来匹配输入行。
  • {action} 是当模式匹配成功时执行的一系列命令。
  • [file ...] 是需要处理的一个或多个文件名。如果没有指定文件,则 awk 从标准输入读取数据。

常用选项

  • -F fs 设置字段分隔符为 fs
  • -v var=valawk 程序中定义变量 var 并赋值为 val
  • -f script-file 指定一个脚本文件来代替直接在命令行上写 awk 程序。

内置变量

awk 提供了许多内置变量,用于简化文本处理任务:

  • ARGV 包含命令行参数。
  • ARGC 包含命令行参数的数量。
  • ARGIND 当前正在处理的文件在 ARGV 中的位置。
  • FILENAME 当前输入文件的名字。
  • NR 记录号,即处理了多少行。
  • NF 字段数,即当前行有多少个字段。
  • RS 记录分隔符,默认为换行符。
  • FS 字段分隔符,默认为空白字符(空格或制表符)。
  • OFS 输出字段分隔符,默认为空格。
  • ORS 输出记录分隔符,默认为换行符。

示例

  1. 打印第二列:
    awk '{print $2}' file
    
  2. 设置字段分隔符为逗号,并打印第一列:
    awk -F, '{print $1}' file
    
  3. 统计文件中的行数:
    awk 'END{print NR}' file
    
  4. 统计每行的单词数:
    awk '{print NF}' file
    
  5. 统计所有数字的总和(假设所有行都是数字):
    awk '{sum += $1} END{print sum}' file
    

复杂操作

awk 还支持条件语句、循环、函数定义等,可以实现非常复杂的逻辑。例如:

awk '
    BEGIN { sum = 0 }
    {
        if ($1 ~ /^[0-9]+$/) # 如果第一列是数字
            sum += $1
    }
    END {
        print "Total:", sum
    }' file

以上只是一个简要介绍,awk 的功能远不止这些。为了更深入地学习 awk,建议查阅官方文档或者相关书籍。

posted @ 2024-09-12 16:46  黄嘉波  阅读(88)  评论(0编辑  收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波