网站搜索

如何在 Linux 中从 STDIN 读取 Awk 输入 - 第 7 部分


在 Awk 工具系列的前面部分中,我们主要研究了从文件读取输入,但是如果您想从 STDIN 读取输入怎么办?

在 Awk 系列的第 7 部分中,我们将看几个示例,您可以在其中过滤其他命令的输出,而不是从文件读取输入。

我们将从 dir 实用程序开始,其工作方式与 ls 命令类似,在下面的第一个示例中,我们使用 dir -l 命令的输出作为 Awk 的输入来打印所有者的用户名、组名和他的文件/she 在当前目录中拥有:

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

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

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

上面的命令包含(==)比较运算符来帮助我们过滤掉当前目录中属于root用户的文件。这是使用表达式 $3== ”root ” 实现的。

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

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

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

在上面的示例中,我们使用了值 ~ /pattern/ 比较运算符,但是有两个命令可以尝试得出一些非常重要的内容。

当您使用模式 tech 运行命令时,不会打印任何内容,因为没有该类型的 交易,但使用 Tech 时,您会得到以下交易输入技术

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

您始终可以使用另一个命令的输出作为 awk 的输入,而不是从文件中读取输入,这非常简单,正如我们在上面的示例中看到的那样。

希望这些示例足以让您理解,如果您有任何疑问,可以通过下面的评论部分表达它们,并记得查看本系列的下一部分,我们将了解 awk 功能例如变量数字表达式赋值运算符