收集云服务器优惠信息
记录云服务器使用心得

Linux系统从STDIN读取和过滤Awk输入示例演示说明

在Awk命令系列的前几部分中,小编主要介绍了了从文件读取输入,但如果你想从STDIN(标准输入)读取输入,应该怎么办呢?

在Awk系列本部分内容中,小编将探讨一些示例,展示如何使用Awk命令过滤其它命令的输出,而不是从文件中读取输入,一起来看看吧。

列出目录中用户拥有的文件

首先将从dir命令开始,它的工作方式与ls命令类似。在下面的示例中,使用dir -l命令的输出作为awk的输入,以打印当前目录中文件所有者的用户名、组名及其拥有的文件:

dir -l | awk '{print $3, $4, $9;}'

列出目录中用户拥有的文件

列出root用户拥有的文件

接下来看看使用awk表达式的另一个例子,这里我们想通过使用一个表达式来过滤字符串,打印由root用户拥有的文件,如下面的awk命令所示:

dir -l | awk '$3=="root" {print $1,$3,$4, $9;} '

列出root用户拥有的文件

上述命令使用了(==)比较运算符,帮助我们过滤出当前目录中由root用户拥有的文件,这是通过表达式$3==”root”来实现的。

使用Awk比较运算符匹配字符串

现在让我们看另一个使用awk比较运算符来匹配某个字符串的例子。

在这里,使用cat命令来查看名为tecmint_deals.txt的文件的内容,并且我们只想查看“Tech”类型的交易,因此可以运行以下命令:

cat tecmint_deals.txt
cat tecmint_deals.txt | awk '$4 ~ /tech/{print}'
cat tecmint_deals.txt | awk '$4 ~ /Tech/{print}'

使用Awk比较运算符匹配字符串

在上面的示例中,我们使用了值~ /pattern/比较运算符,但还有两个命令可以用来强调一个非常重要的点。

  • 当使用模式tech运行命令时,不会打印任何内容,因为没有该类型的交易,但使用Tech ,会得到Tech类型的交易。

因此,使用此比较运算符时要务必小心,正如我们上面看到的,它区分大小写。

总之不管怎样,你始终可以使用另一个命令的输出作为awk的输入,而不是只能从文件读取输入,这使用起来也非常简单,正如在上面的示例中所看到的那样。

过滤今天修改的文件

如果要过滤今天修改过的文件,则可以使用awk来提取并显示这些文件:

ls -l | awk '$6 == "Sep" && $7 == "22" {print $9}'

此命令过滤9月22日修改的文件。

统计特定类型的文件

要计算某个目录中的.txt文件数量,请使用以下命令:

ls -l | awk '$9 ~ /\.txt$/ {count++} END {print count}'

从命令输出中提取特定字段

如果要从ps命令输出中提取特定字段,例如进程ID和命令名称:

ps aux | awk '{print $1, $2, $11}'

小结

希望以上这些例子能够让你了解从STDIN读取和过滤Awk输入的方法,这样就可以直接处理管道中的数据,从而不需要先保存到文件中,适合实时处理,最终能够快速过滤和处理数据。

此外,这种方法还可以处理不同命令的输出,便于将多个命令结合使用,实现复杂的数据处理,并且不需要额外的存储空间,尤其适合处理大数据集。这些优点使得在日常使用中,使用Awk从STDIN读取和过滤数据变得非常实用。

赞(0)
网站声明:本文内容由趣云笔记原创,部分资源收集于网络,如有侵权请联系企鹅:2472781824删除。
文章名称:《Linux系统从STDIN读取和过滤Awk输入示例演示说明》
文章链接:https://www.ecscoupon.com/8804.html
本站资源仅供个人学习交流,未经允许不得转载,更不允许用于商业用途。如需转载,请注明来源,感谢理解!