如何使用 Awk 打印文件中的字段和列

简介: 如何使用 Awk 打印文件中的字段和列

Awk 是一个功能强大的文本处理工具,可以有效地操作和从文件中提取信息,特别是处理结构化数据,例如日志文件、CSV 文件等。

其最通用的功能之一是能够根据预定义的分隔符从文件中打印特定字段和列。

本文中,我们将探讨如何利用 Awk 打印字段和列,并提供实际示例和解释来证明其有效性。

在 Awk 中,“字段”是指行中的特定文本段,由预定义的分隔符(例如空格、制表符或逗号)分隔。每个段都分配有一个字段编号,第一个字段为 $1,第二个字段为 $2,依此类推。

类似地,“列”表示跨多行的垂直字段分组。通过利用 Awk 的功能,我们可以有选择地打印或操作这些字段和列,以从数据中提取有价值的信息。

awk 自动将提供给它的输入行划分为字段,并且字段可以定义为通过内部字段分隔符与其他字段分隔的一组字符。

如果您熟悉 Unix/Linux 或进行 bash shell 编程,那么您应该知道内部字段分隔符 (IFS) 变量是什么。 Awk 中默认的 IFS 是制表符和空格。

为了更好地理解 Awk 字段编辑,让我们看一下下面的示例:

打印字段

要使用 Awk 打印文件中的特定字段,您可以使用“print”语句以及所需的字段变量。例如,要打印以逗号分隔的文件的第一个、第二个和第三个字段,我们可以使用以下命令:

awk '{print $1 "," $2 "," $3}' tecmintinfo.txt

在上面的命令中,您可以看到前三个字段的字符是根据定义的 IFS(空格)打印的:

  • 第一个字段“TecMint.com”使用 $1 访问。
  • 使用 $2 访问第二个字段“is”。
  • 第三个字段“the”是使用 $3 访问的。

需要注意并始终记住的一件重要事情是,在 Awk 中使用 ($) 与在 shell 脚本中使用不同。在 shell 脚本中,($) 用于访问变量的值,而在 awk 中,($) 仅在访问字段内容时使用,而不用于访问变量的值。

打印列

要打印文件中的整个列,我们可以通过在“print”语句中指定所需的字段来采用类似的方法。然而,这次我们考虑用多条线来共同表示该列。

例如,要打印文件的第二列和第三列,我们可以使用以下命令:

awk '//{print $2, $3 }' my_shopping.txt

awk 还有一个 printf 命令可以帮助您格式化输出,这是一个很好的方法,因为您可以看到上面的输出不够清晰。

使用 printf 格式化 Item_Name 和 Unit_Price 的输出:

awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt

打印字段和列范围

awk 还允许我们使用“:”运算符定义字段或列的范围。例如,要从文件中打印字段 2 到 4,我们可以使用以下命令。

awk '{print $2 ":" $4}' filename

总结

当使用 awk 过滤文本或字符串时,字段编辑非常重要,它可以帮助您获取列表中列中的特定数据。并且永远记住,Awk 中 ($) 运算符的使用与 shell 脚本中的不同。

希望这篇文章对您有所帮助!

相关文章
|
人工智能 数据库
GEE数据集——USGS全球地震数据集
GEE数据集——USGS全球地震数据集
471 2
|
Prometheus 监控 Cloud Native
Prometheus(普罗米修斯)
Prometheus(普罗米修斯)
1203 0
|
运维 监控 Oracle
Java小史:JDK现状
简单说一下现在主流的JDK
3427 0
Java小史:JDK现状
|
缓存 开发工具
RedHat8.4配置本地yum软件仓库(RHEL8.4)
RedHat8.4配置本地yum软件仓库(RHEL8.4)
2250 0
RedHat8.4配置本地yum软件仓库(RHEL8.4)
|
SQL XML Java
MyBatis-Plus——代码生成器(3.5.1+版本)
MyBatis-Plus——代码生成器(3.5.1+版本)
2572 0
MyBatis-Plus——代码生成器(3.5.1+版本)
|
7月前
|
传感器 人工智能 运维
2025年最新设备巡检系统评测,哪款更适合你
本文将从评测角度,带你了解各类设备巡检系统的特点和适用场景,并重点剖析草料二维码的优势,帮助企业在预算、环境和技术水平等因素下,选择最适合的巡检方案。
|
Perl
awk打印表头
awk打印表头
212 2
|
存储 Ubuntu Linux
NFS服务部署全攻略:从零到一,轻松驾驭网络文件系统,让你的文件共享像飞一样畅快无阻!
【8月更文挑战第5天】NFS(网络文件系统)能让网络中的电脑无缝共享文件与目录。基于客户端-服务器模式,用户可像访问本地文件般透明操作远程文件。部署前需准备至少两台Linux机器:一台服务器,其余作客户端;确保已装NFS相关软件包且网络通畅。服务器端安装NFS服务与rpcbind,客户端安装nfs-utils。
774 4
|
Docker 容器
蓝易云 - Docker修改容器ulimit的全部方案及各方案的详细步骤
以上就是修改Docker容器ulimit的全部方案及其详细步骤。
540 2
|
网络协议 Linux
Cannot assign requested address解决办法
Cannot assign requested address解决办法