请选择 进入手机版 | 继续访问电脑版

[LINUX] 使用 awk输出文本中的字段和列的方法

[复制链接]
查看108 | 回复3 | 2021-9-5 02:06:47 | 显示全部楼层 |阅读模式

起首 我们要知道,awk 可以或许 自动 将输入的行,分隔为多少 字段。每一个字段就是一组字符,它们和其他的字段由一个内部字段分隔符分隔开来。

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

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

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

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

# vi tecmintinfo.txt

# cat tecmintinfo.txt

使用

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 小野妹子868 | 2021-9-19 06:44:36 | 显示全部楼层
每次看到admin楼主的帖子都有惊吓!
回复

使用道具 举报

avatar 成哥337 | 2021-10-15 20:20:50 | 显示全部楼层
admin楼主内心很强大!
回复

使用道具 举报

今天是个特别的日子,值得纪念!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则