首页IT科技awk中printf(使用awk输出文本中的字段和列的方法)

awk中printf(使用awk输出文本中的字段和列的方法)

时间2025-05-04 01:58:15分类IT科技浏览4843
导读:首先我们要知道,awk 能够自动将输入的行,分隔为若干字段。每一个字段就是一组字符,它们和其他的字段由一个内部字段分隔符分隔开来。...

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

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

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

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

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

# vi tecmintinfo.txt

# cat tecmintinfo.txt

在 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 脚本中的用法是不同的!

声明:本站所有文章            ,如无特殊说明或标注                  ,均为本站原创发布      。任何个人或组织       ,在未征得本站同意时      ,禁止复制             、盗用                   、采集      、发布本站内容到任何网站      、书籍等各类媒体平台      。如若本站内容侵犯了原著者的合法权益                  ,可联系我们进行处理                   。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
音频视频开发(开发者工具|15款音视频开发者必备实用工具,看看你用过几个?) hpadrv.sys(hpsysdrv.exe是什么进程?hpsysdrv.exe是病毒吗?)