awk取文本列_如何使用 Awk 打印文件中的字段和列

本文介绍了Linux Awk命令中的字段编辑功能,包括如何使用Awk自动切分输入行并访问字段。Awk默认的内部字段分隔符是空格和制表符,字段可以通过$1, $2等来访问。举例说明了如何打印文件的特定字段,并展示了如何使用printf命令格式化输出,以提高输出的可读性。在处理文本和字符串过滤时,Awk的字段编辑功能非常实用。
摘要由CSDN通过智能技术生成

在 Linux Awk 命令系列介绍 的这部分,我们来看一下 awk 最重要的功能之一,字段编辑。

首先我们要知道 Awk 会自动把输入的行切分为字段,字段可以定义为是一些字符集,这些字符集和其它字段被内部字段分隔符分离。

Awk 输出字段和列

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

Awk 字段切分的工作原理如下:当获得一行输入时,根据定义的 IFS,第一个字符集是字段一,用 $1 表示,第二个字符集是字段二,用 $2 表示,第三个字符集是字段三,用 $3 表示,以此类推直到最后一个字符集。

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

事例 1:: 我创建了一个名为 tecmintinfo.txt 的文件。# vi tecmintinfo.txt# cat tecmintinfo.txt

在 Linux 中创建文件

然后在命令行中使用以下命令打印 tecmintinfo.txt 文件中的第一、第二和第三个字段。$ awk '//{print $1 $2 $3 }' tecmintinfo.txtTecMint.comisthe

从上面的输出中你可以看到,三个字段中的第一个是按照定义的 IFS,也就是空格,打印的。字段一 “TecMint.com” 使用 $1 访问。

字段二 “is” 通过 $2 访问。

字段三 “the” 通过 $3 访问。

如果你注意打印的输出,可以看到字段值之间并没有分隔开,这是 print 默认的方式。

为了在字段值之间加入空格,你需要像下面这样添加(,)分隔符:$ awk '//{print $1, $2, $3; }' tecmintinfo.txtTecMint.com is the

很重要而且必须牢记的一点是,Awk 中 ($) 的使用和在 shell 脚本中不一样。

在 shell 脚本中 ($) 用于获取变量的值,而在 Awk 中 ($) 只用于获取一个字段的内容,而不能用于获取变量的值。

事例2: 让我们再看一个使用多行文件 my_shoping.list 的例子。No    Item_Name        Unit_Price    Quantity    Price1    Mouse            #20,000           1        #20,0002     Monitor            #500,000       1        #500,0003    RAM_Chips        #150,000       2        #300,0004    Ethernet_Cables            #30,000           4        #120,000

假设你只想打印购物清单中每个物品的 Unit_Price,你需要允许下面的命令:$ awk '//{print $2, $3 }' my_shopping.txt Item_Name Unit_Price

Mouse #20,000Monitor #500,000RAM_Chips #150,000Ethernet_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,000Monitor    #500,000RAM_Chips  #150,000Ethernet_Cables #30,000

总结

使用 Awk 进行文本和字符串过滤时字段编辑功能非常重要,它能帮助你从列表中获取列的特定数据。同时需要记住 Awk 中 ($) 操作符和 shell 脚本中不一样。

我希望这篇文章能对你有所帮助,如果你需要获取其它信息或者有任何疑问,都可以在下面的评论框中告诉我们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值