迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

awk 教程 – 7 个 awk 打印示例

作者:迹忆客 最近更新:2022/10/29 浏览次数:

这是新的 awk 教程系列的第一篇文章。我们将在接下来的时间里内发布几篇关于 awk 的文章,这些文章将通过实际示例介绍 awk 的所有功能。

在本文中,让我们回顾一下基本的 awk 工作方法以及 7 个实用的 awk 打印示例。

awk 介绍和打印操作

awk 是一种编程语言,可以轻松操作结构化数据并生成格式化报告。 Awk 代表其作者的名字“Aho、Weinberger 和 Kernighan”

awk 主要用于模式扫描和处理。它搜索一个或多个文件以查看它们是否包含与指定模式匹配的行,然后执行相关操作。

awk 的一些关键特性是:

  • awk 将文本文件视为记录和字段。
  • 与常见的编程语言一样,Awk 有变量、条件和循环
  • awk 有算术和字符串运算符。
  • awk 可以生成格式化报告

awk 从文件或其标准输入读取数据,并输出到其标准输出。 awk 不能处理非文本文件。

语法

awk '/search pattern1/ {Actions}
     /search pattern2/ {Actions}' file

在上面的 awk 语法中:

  • 搜索模式是一个正则表达式。
  • Actions——要执行的语句。
  • 在 awk 中可以使用多种模式和操作。
  • file——输入文件。
  • 程序周围的单引号是为了避免 shell 不解释它的任何特殊字符。

awk 工作方法

awk 一次读取一行输入文件。

  • 对于每一行,它以给定的顺序与给定的模式匹配,如果匹配执行相应的操作。
  • 如果没有模式匹配,则不会执行任何操作。
  • 在上述语法中,搜索模式或操作都是可选的,但不能同时使用。
  • 如果没有给出搜索模式,则 Awk 对输入的每一行执行给定的操作。
  • 如果未给出操作,则打印与给定模式匹配的所有行,这是默认操作。
  • 没有任何动作的空括号什么都不做。 它不会执行默认的打印操作。
  • Actions 中的每条语句都应该用分号分隔。

让我们创建具有以下内容的 employee.txt 文件,将在下面提到的例子中使用。

employee.txt

100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

awk 示例 1. awk 的默认行为

默认情况下,Awk 打印文件中的每一行。

$ awk '{print;}' employee.txt

Awk 打印文件中每一行

在上面的示例中没有给出模式。 因此,这些操作适用于所有行。

默认情况下,不带任何参数的操作打印会打印整行。 所以它成功打印文件的所有行。 Action必须用大括号括起来。

awk 示例 2. 打印与模式匹配的行

$ awk '/Thomas/
> /Nisha/' employee.txt

awk 打印与模式匹配的行

在上面的例子中,它打印出所有与“Thomas”或“Nisha”匹配的行。 它有两种模式。 awk 接受任意数量的模式,但每个集合(模式及其对应的操作)都必须用换行符分隔。

awk 示例 3. 仅打印特定字段

awk 有许多内置变量。 对于每条记录,即行,它默认分割由空白字符分隔的记录并将其存储在 $n 变量中。 如果该行有 4 个单词,它将存储在 $1、**$2$3** 和 $4 中。 $0 代表整行。 NF 是一个内置变量,表示记录中的字段总数。

$ awk '{print $2,$5;}' employee.txt

awk 打印特定字段

在上面的例子中,$2$5 分别代表 NameSalary。 我们也可以使用 $NF 获得薪水,其中 $NF 代表最后一个字段。 在 print 语句中,,是一个连接符。

awk 示例 4. 初始化和最终操作

awk 有两个重要的模式,由关键字 BEGINEND 指定。

语法

BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }

# 这里是Awk注释

BEGIN 部分中指定的操作将在开始从输入读取行之前执行。

END 动作将在完成读取和处理输入的行后执行。

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
{print $2,"\t",$3,"\t",$4,"\t",$NF;}
END{print "Report Generated\n--------------";
}' employee.txt

awk 初始化和最终操作

在上面的示例中,它打印报告的标题和最后一个文件。

awk 示例 5. 查找员工 id 大于 200 的员工

$ awk '$1 >200' employee.txt
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

awk 查找员工 id 大于 200 的员工

在上面的示例中,第一个字段 $1 是员工 ID。 因此,如果 $1 大于 200,则只需执行默认打印操作即可打印整行。

awk 示例 6. 打印技术部门的员工列表

现在部门名称作为第四个字段可用,因此需要检查 $4 是否与字符串“Technology”匹配,如果是则打印该行。

$ awk '$4 ~/Technology/' employee.txt

awk 打印技术部门的员工列表

运算符 ~ 用于与正则表达式进行比较。 如果它与默认操作匹配,即打印整行将被执行。

awk 示例 7. 打印技术部门的员工人数

下面的例子,检查部门是否是 Technology,如果是,则在 Action 中增加 count 变量,该变量在 BEGIN 部分初始化为零。

$ awk 'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in Technology Dept =",count;}' employee.txt

awk 打印技术部门的员工人数

然后在流程结束时,只需打印 count 的值,它会为我们提供技术部门的员工人数。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 Linux 中更新 YUM

发布时间:2023/05/04 浏览次数:82 分类:操作系统

本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。

在 Linux 中安装 Deb 文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。

Linux 中的 lsof 命令

发布时间:2023/05/04 浏览次数:82 分类:操作系统

在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。

Linux 中的 ps aux 命令

发布时间:2023/05/04 浏览次数:69 分类:操作系统

本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。

Linux 中的 NTP

发布时间:2023/05/04 浏览次数:137 分类:操作系统

本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。

在 Linux 中计算文件中的唯一行

发布时间:2023/05/04 浏览次数:70 分类:操作系统

计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便