如何使用 awk 输出文本中的字段和列

Crq
Crq
Crq
1169
文章
0
评论
2024年8月25日07:52:00
评论
23 1453字阅读4分50秒

首先我们要知道,awk 能够自动将输入的行,分隔为若干字段。每一个字段就是一组字符,它们和其他的字段由一个内部字段分隔符分隔开来。

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

awk 中的字段分隔符的工作原理如下:当读到一行输入时,将它按照指定的 IFS 分割为不同字段,第一组字符就是字段一,可以通过 $1 来访问,第二组字符就是字段二,可以通过 $2 来访问,第三组字符就是字段三,可以通过 $3 来访问,以此类推,直到最后一组字符。

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

例 1:我创建了一个名为 tecmintinfo.txt 的文本文件。

# vi tecmintinfo.txt
# cat tecmintinfo.txt

awk 系列:如何使用 awk 输出文本中的字段和列

在 Linux 上创建一个文件

然后在命令行中,我试着使用下面的命令从文本 tecmintinfo.txt 中输出第一个,第二个,以及第三个字段。

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt
TecMint.comisthe

从上面的输出中你可以看到,前三个字段的字符是以空格为分隔符输出的:

  • 字段一是 “TecMint.com”,可以通过 $1 来访问。
  • 字段二是 “is”,可以通过 $2 来访问。
  • 字段三是 “the”,可以通过 $3 来访问。

如果你注意观察输出的话可以发现,输出的字段值并没有被分隔开,这是 print 函数默认的行为。

为了使输出看得更清楚,输出的字段值之间使用空格分开,你需要添加 (,) 操作符。

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt
TecMint.com is the

需要记住而且非常重要的是,($) 在 awk 和在 shell 脚本中的使用是截然不同的!

在 shell 脚本中,($) 被用来获取变量的值。而在 awk 中,($) 只有在获取字段的值时才会用到,不能用于获取变量的值。

例 2:让我们再看一个例子,用到了一个名为 my_shoping.list 的包含多行的文件。

No    Item_Name                 Unit_Price  Quantity    Price
1     Mouse                     #20,000     1           #20,000
2     Monitor                   #500,000    1           #500,000
3     RAM_Chips                 #150,000    2           #300,000
4     Ethernet_Cables           #30,000     4           #120,000        

如果你只想输出购物清单上每一个物品的单价,你只需运行下面的命令:

$ awk '//{print $2, $3 }' my_shopping.txt
Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

可以看到上面的输出不够清晰,awk 还有一个 printf 的命令,可以帮助你将输出格式化。

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

$ awk '//{printf "%-10s %s/n",$2, $3 }' my_shopping.txt
Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000
总结

使用 awk 过滤文本或字符串时,字段编辑的功能是非常重要的。它能够帮助你从一个表的数据中得到特定的列。一定要记住的是,awk 中 ($) 操作符的用法与其在 shell 脚本中的用法是不同的!

weinxin
我的微信
这是我的微信扫一扫
Crq
  • 本文由 发表于 2024年8月25日07:52:00
  • 转载请注明:https://www.cncrq.com/10525.html
Linux安全必做的几个设置(一) Linux教程

Linux安全必做的几个设置(一)

安全无小事,在这个系列中, 我们会讨论一些阻止黑客入侵你的系统的重要信息,也可以观看这个免费的网络点播研讨会获取更多的信息。今天我们介绍了两种方法阻止黑客入侵你的Linux系统。
Linux调优–I/O 调度器 Linux教程

Linux调优–I/O 调度器

Linux 的 I/O 调度器是一个以块式 I/O 访问存储卷的进程,有时也叫磁盘调度器。Linux I/O 调度器的工作机制是控制块设备的请求队列:确定队列中哪些 I/O 的优先...
初识puppet Linux教程

初识puppet

puppet 是一种Linux、Unix 平台的集中配置管理系统,使用自有的puppet 描述语言,可管理配置文件、用户、cron 任务、软件包、系统服务等。puppet 把这些系...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: