如何在linux上使用awk命令

在Linux上,awk是一种命令行文本操作生成器,也是一种功能强大的脚本语言。下面介绍一些最酷的功能。...

在Linux上,awk是一种命令行文本操作生成器,也是一种功能强大的脚本语言。下面介绍一些最酷的功能。

awk是怎么得名的

awk命令的名字是使用1977年编写原始版本的三个人的缩写:阿尔弗雷德·阿霍、彼得·温伯格和布莱恩·克尼汉。这三个人来自传说中的AT&T贝尔实验室Unix pantheon。在许多其他国家的贡献下,特设工作组继续发展。

它是一种完整的脚本语言,也是命令行的完整文本操作工具包。如果本文激发了您的胃口,您可以查看有关awk及其功能的所有细节。

规则、模式和操作

awk在包含由模式和动作组成的规则的程序上工作。对与模式匹配的文本执行操作。图案用大括号({})括起来。一个模式和一个动作共同构成一个规则。整个awk程序用单引号(')括起来。

让我们看看最简单的awk程序类型。它没有模式,所以它匹配输入的每一行文本。这意味着操作在每一行上执行。我们将在who命令的输出中使用它。

世卫组织的标准产出如下:

who

如何在linux上使用awk命令

也许我们不需要所有这些信息,但是,更确切地说,我们只想看到账户上的名字。我们可以将who的输出导入awk,然后告诉awk只打印第一个字段。

默认情况下,awk认为字段是由空格、行首或行尾包围的字符串。字段由美元符号($)和数字标识。所以,$1代表第一个字段,我们将用它和print操作一起打印第一个字段。

我们键入以下内容:

who | awk '{print $1}'

如何在linux上使用awk命令

awk打印第一个字段并丢弃行的其余部分。

我们可以打印任意多的字段。如果我们添加逗号作为分隔符,awk会在每个字段之间打印一个空格。

我们键入以下内容还可以打印人员登录的时间(字段4):

who | awk '{print $1,$4}'

如何在linux上使用awk命令

有几个特殊的字段标识符。它们表示整行文本和文本行中的最后一个字段:

  • $0:表示整行文本。
  • $1:表示第一个字段。
  • $2:表示第二个字段。
  • $7:表示第七个字段。
  • $45:表示第45个字段。
  • $NF:表示“字段数”,表示最后一个字段。

我们将键入以下内容,以显示一个小文本文件,其中包含DennisRitchie的简短报价:

cat dennis_ritchie.txt

如何在linux上使用awk命令

我们希望awk打印报价的第一个、第二个和最后一个字段。请注意,尽管它在终端窗口中环绕,但它只是一行文本。

我们键入以下命令:

awk '{print $1,$2,$NF}' dennis_ritchie.txt

如何在linux上使用awk命令

我们不知道“简单性”是文本行中的第18个字段,我们不在乎。我们只知道它是最后一个字段,我们可以使用$NF来获取它的值。周期只是场主体中的另一个字符。

添加输出字段分隔符

您还可以告诉awk在字段之间打印特定字符,而不是默认的空格字符。date命令的默认输出有点奇怪,因为时间就在它的中间。但是,我们可以键入以下内容并使用awk提取所需字段:

date date | awk '{print $2,$3,$6}'

我们将使用OFS(output field separator)变量在月、日和年之间放置一个分隔符。请注意,下面我们将命令括在单引号(')中,而不是大括号({}):

date | awk 'OFS="/" {print$2,$3,$6}' date | awk 'OFS="-" {print$2,$3,$6}'

如何在linux上使用awk命令

开始和结束规则

在任何文本处理开始之前,一个开始规则将执行一次。事实上,它是在awk读取任何文本之前执行的。在所有处理完成后执行结束规则。您可以有多个开始和结束规则,它们将按顺序执行。

对于BEGIN规则的示例,我们将打印来自dennis的整个引用_里奇.txt我们以前使用的文件,上面有一个标题。

为此,我们键入以下命令:

awk 'BEGIN {print "Dennis Ritchie"} {print $0}' dennis_ritchie.txt

如何在linux上使用awk命令

注意,BEGIN规则有自己的一组操作,它们包含在自己的一组大括号({})。

我们可以将这个相同的技术与之前用于将who的输出导入awk的命令一起使用。为此,我们键入以下内容:

who | awk 'BEGIN {print "Active Sessi***"} {print $1,$4}'

如何在linux上使用awk命令

输入字段分隔符

如果希望awk处理不使用空格分隔字段的文本,则必须告诉它文本使用哪个字符作为字段分隔符。例如,/etc/passwd文件使用冒号(:)分隔字段。

我们将使用该文件和-F(分隔符字符串)选项来告诉awk使用冒号(:)作为分隔符。我们键入以下命令来告诉awk打印用户帐户和主文件夹的名称:

awk -F: '{print $1,$6}' /etc/passwd

如何在linux上使用awk命令

输出包含用户帐户的名称(或应用程序或守护程序名称)和主文件夹(或应用程序的位置)。

如何在linux上使用awk命令

添加图案

如果我们只对普通用户帐户感兴趣,我们可以在打印操作中包含一个模式,以过滤掉所有其他条目。因为用户标识号等于或大于1000,所以我们可以根据这些信息筛选。

仅当第三个字段($3)包含1000或更大的值时,我们键入以下内容以执行打印操作:

awk -F: '$3 >= 1000 {print $1,$6}' /etc/passwd

如何在linux上使用awk命令

模式应该紧跟在与其关联的操作之前。

我们可以使用BEGIN规则为我们的小报告提供标题。键入以下内容,使用(\n)表示法将换行符**标题字符串:

awk -F: 'BEGIN {print "User Accounts\n-------------"} $3 >= 1000 {print $1,$6}' /etc/passwd

如何在linux上使用awk命令

模式是成熟的正则表达式,它们是awk的荣耀之一。

假设我们希望看到装载的文件系统的通用唯一标识符(uuid)。如果我们在/etc/fstab文件中搜索字符串“UUID”的出现,它应该会为我们返回该信息。

我们在命令中使用搜索模式“/UUID/”:

awk '/UUID/ {print $0}' /etc/fstab

如何在linux上使用awk命令

它会找到所有出现的“UUID”,并打印这些行。实际上,如果没有打印操作,我们会得到相同的结果,因为默认操作会打印整个文本行。但是,为了清晰起见,明确的表达通常是有用的。当你浏览一个脚本或历史文件时,你会很高兴你为自己留下线索。

找到的第一行是一条注释行,虽然“UUID”字符串位于注释行的中间,但awk仍然找到了它。我们可以调整正则表达式,并告诉awk只处理以“UUID”开头的行。为此,我们键入以下内容,其中包括行标记的开始(^):

awk '/^UUID/ {print $0}' /etc/fstab

如何在linux上使用awk命令

这样更好!现在,我们只看到真正的安装说明。为了进一步细化输出,我们键入以下内容并将显示限制为第一个字段:

awk '/^UUID/ {print $1}' /etc/fstab

如何在linux上使用awk命令

如果我们在这台机器上安装了多个文件系统,我们会得到一个整洁的uuid表。

内置函数

awk有许多函数,您可以在自己的程序中调用和使用,无论是从命令行还是在脚本中。如果你做一些挖掘,你会发现它很有成效。

为了演示调用函数的一般技术,我们将看一些数字方法。例如,下面打印625的平方根:

awk 'BEGIN { print sqrt(625)}'

此命令打印0(零)和-1(正好是数学常数pi)的反正切:

awk 'BEGIN {print atan2(0, -1)}'

在以下命令中,我们在打印atan2()函数之前修改其结果:

awk 'BEGIN {print atan2(0, -1)*100}'

函数可以接受表达式作为参数。例如,这里有一个复杂的方法来求25的平方根:

awk 'BEGIN { print sqrt((2+3)*5)}'

如何在linux上使用awk命令

awk脚本

如果您的命令行变得复杂,或者您开发了一个您知道要再次使用的例程,您可以将awk命令转换为脚本。

在我们的示例脚本中,我们将执行以下所有操作:

  • 告诉shell要使用哪个可执行文件来运行脚本。
  • 准备awk以使用FS field separator变量读取输入文本,其中字段由冒号(:)分隔。
  • 使用OFS输出字段分隔符告诉awk使用冒号(:)分隔输出中的字段。
  • 将计数器设置为0(零)。
  • 将每行文本的第二个字段设置为空值(它总是一个“x”,所以我们不需要看到它)。
  • 打印具有修改的第二个字段的行。
  • 增加计数器。
  • 打印计数器的值。

我们的脚本如下所示。

如何在linux上使用awk命令

BEGIN规则执行准备步骤,END规则显示计数器值。中间规则(没有名称,也没有模式,所以它匹配每一行)修改第二个字段,打印行,并增加计数器。

脚本的第一行告诉shell要使用哪个可执行文件(在我们的示例中是awk)来运行脚本。它还将-f(filename)选项传递给awk,awk通知它要处理的文本将来自一个文件。我们将在运行脚本时将文件名传递给脚本。

我们已将以下脚本作为文本包含在内,以便您可以剪切和粘贴:

#!/usr/bin/awk -f BEGIN { # set the input and output field separators FS=":" OFS=":" # zero the accounts counter accounts=0 } { # set field 2 to nothing $2="" # print the entire line print $0 # count another account accounts++ } END { # print the results print accounts " accounts.\n" }

将其保存到名为省略.awk. 要使脚本可执行,请使用chmod键入以下内容:

chmod +x omit.awk

如何在linux上使用awk命令

现在,我们将运行它并将/etc/passwd文件传递给脚本。这是awk将使用脚本中的规则为我们处理的文件:

./omit.awk /etc/passwd

如何在linux上使用awk命令

将处理文件并显示每一行,如下所示。

如何在linux上使用awk命令

第二个字段中的“x”项已被删除,但请注意,字段分隔符仍然存在。对行进行计数,并在输出的底部给出总数。

awk不代表笨拙

awk不代表笨拙,它代表优雅。它被描述为一个处理过滤器和一个报告编写器。更准确地说,它是这两个,或者,更确切地说,一个工具,你可以使用这两个任务。只需几行代码,awk就可以用传统语言实现需要大量编码的功能。

这种能力是由包含模式的规则、选择要处理的文本的规则和定义处理的操作的简单概念来利用的。

  • 发表于 2021-04-02 15:02
  • 阅读 ( 164 )
  • 分类:互联网

你可能感兴趣的文章

40多个最常用的linux终端命令

... 在您真正充分利用终端之前,您需要知道如何导航它。这就是为什么我们认为这些是最基本的Linux命令:如果你不能更改目录或者在一个你不记得如何使用的命令上获得帮助,那么再多的终端知识也帮不了你。 ...

  • 发布于 2021-03-15 21:40
  • 阅读 ( 261 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 308 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 288 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 334 )

初学者的nmap:获得端口扫描的实践经验

... 如何使用nmap扫描网络 ...

  • 发布于 2021-03-28 11:48
  • 阅读 ( 181 )

针对初学者系统管理员的10个linux强化提示

...空。如果发现有人密码为空,请立即锁定该用户。您可以使用以下方法来实现这一点。 ...

  • 发布于 2021-03-28 14:39
  • 阅读 ( 250 )

如何在linux上使用whois命令

...第五项,从whois的响应中提取每个域的过期日期。 相关:如何在Linux上使用awk命令 方便和自动化 是的,你也可以在网上进行whois查询。但是,在终端窗口和脚本中使用whois命令提供了方便性和灵活性,并使您可以选择自动化一些...

  • 发布于 2021-04-01 23:54
  • 阅读 ( 203 )

如何从linux终端检查内存使用情况

...ee、vmstat和top。我们还将直接查看reading/proc/meminfo。 linux如何使用ram RAM是一种有限的资源,所有进程(如应用程序和守护进程)都需要它的一部分。只有这么多了。内核判断内存争用,并将定量分配的内存分配给所有饥饿的进...

  • 发布于 2021-04-02 13:03
  • 阅读 ( 214 )

如何在linux上删除用户(并删除所有跟踪)

...死他的进程之前,我们会锁定密码来冻结帐户。 相关:如何使用ps命令监视Linux进程 锁定帐户 在终止进程之前,我们将锁定帐户,因为当我们终止进程时,它将注销用户。如果我们已经更改了他的密码,他就无法登录了。 加密...

  • 发布于 2021-04-02 15:16
  • 阅读 ( 179 )

如何在linux上使用管道

使用Linux管道编排命令行实用程序如何协作。通过利用一组独立命令并将它们转化为一个专注的团队,简化复杂的流程并提高生产率。我们教你怎么做。 到处都是管道 管道是Linux和类Unix操作系统最有用的命令行特性之一。管道...

  • 发布于 2021-04-03 04:49
  • 阅读 ( 199 )
poolase
poolase

0 篇文章

相关推荐