Linux中的AWK命令及示例:如何使用AWK?

2021年11月19日17:53:09 发表评论 1,101 次浏览

Linux AWK命令使用教程介绍

awk命令是一种 Linux 工具和编程语言,允许用户处理和操作数据并生成格式化报告。该工具支持高级文本处理的各种操作,并有助于表达复杂的数据选择。

在本教程中,你将了解Linux中的AWK命令及示例,包括awk命令的作用以及如何使用它。

先决条件

  • 一个运行 Linux 的系统。
  • 访问终端窗口。

AWK 命令语法

Linux如何使用AWK命令awk命令的语法是:

awk [options] 'selection_criteria {action}' input-file > output-file

可用的选项是:

选项描述
-F [separator]用于指定文件分隔符。默认分隔符是一个空格。
-f [filename]用于指定包含awk 脚本的文件 。awk 从指定的文件中读取 程序源,而不是第一个命令行参数。
-v用于分配变量。

注意:你可能还对了解Linux curl 命令感兴趣,该命令允许你在使用 awk 处理数据后将数据传入和传出服务器。

AWK 命令如何工作?

awk命令的主要目的是使信息检索和文本操作在 Linux 中易于执行。该命令通过按顺序扫描一组输入行并搜索与用户指定的模式匹配的行来工作。

对于每个模式,用户可以指定要在与指定模式匹配的每一行上执行的操作。因此,使用awk,用户可以轻松处理复杂的日志文件并输出可读的报告。

AWK 操作

awk 允许用户对输入文件或文本执行各种操作。一些可用的操作是:

  • 逐行扫描文件。
  • 将输入行/文件拆分为字段。
  • 将输入行或字段与指定的模式进行比较。
  • 在匹配的行上执行各种操作。
  • 格式化输出行。
  • 执行算术和字符串运算。
  • 在输出上使用控制流和循环。
  • 根据指定的结构转换文件和数据。
  • 生成格式化报告。

AWK 声明

该命令提供基本的控制流语句(if-elsewhileforbreak),还允许用户使用大括号对语句进行分组{}

  • if-else

Linux中的AWK命令及示例:该语句通过评估括号中指定的条件来工作,如果条件为真,则执行该语句后面的语句。该部分是可选的。 if-elseif else

例如:

awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt
Linux中的AWK命令及示例:如何使用AWK?

输出显示线中存在的重复和国家没有重复,如果有行内没有重复的答案。

  • while

Linux如何使用AWK命令while只要指定的条件为真,该语句就会重复执行目标语句。这意味着它的运行方式与 C 编程语言中的一样。如果条件为真,则执行循环体。如果条件为假,则 awk 继续执行。

例如,以下语句指示 awk 每行打印一个所有输入字段:

awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt
Linux中的AWK命令及示例:如何使用AWK?
  • for

for语句也像 C 一样工作,允许用户创建需要执行特定次数的循环。

Linux AWK命令用法示例

awk 'BEGIN{for(i=1; i<=10; i++) print "The square root of", i, "is", i*i;}'
Linux中的AWK命令及示例:如何使用AWK?

上面的语句将 的值增加i一直到达到十并计算i每次的平方根。

注意:if , whileor条件部分的表达式for可以包含关系运算符,例如<, , >=, ==(等于)和!=(不等于)。表达还可以包括与匹配运算符正则表达式匹配!∼,逻辑运算符||, &&,和!。运算符用括号分组。

  • break

break语句立即从封闭的whileor 中退出for。要开始下一次迭代,请使用该continue语句。

next 语句指示 awk 跳到下一条记录并从顶部开始扫描模式。该exit语句指示 awk 输入已结束。

以下是该break语句的示例:

awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'
Linux中的AWK命令及示例:如何使用AWK?

上面的命令在 5 次迭代后中断循环。

注意:awk工具允许用户在AWK程序中放置注释。注释以行#尾开始和结束。

AWK 模式

Linux中的AWK命令及示例:在操作前插入一个模式 awk 作为选择器。选择器决定是否执行一个动作。以下表达式可以用作模式:

  • 常用表达。
  • 算术关系表达式。
  • 字符串值表达式。
  • 上述表达式的任意布尔组合。

以下部分解释了上述表达式以及如何使用它们。

注意:了解如何使用grep 命令搜索字符串或模式。

正则表达式模式

正则表达式模式是最简单的表达式形式,其中包含用斜杠括起来的字符串。它可以是一系列字母、数字或两者的组合。

在以下示例中,程序输出所有以“A”开头的行。如果指定的字符串是更大单词的一部分,它也会被打印出来。

awk '$1 ~ /^A/ {print $0}' employees.txt
Linux中的AWK命令及示例:如何使用AWK?

Linux AWK命令使用教程:关系表达模式

另一种类型的 awk 模式是关系表达模式。关系表达式模式涉及使用以下任何关系运算符:<、<=、==、!=、>=>

Linux如何使用AWK命令?以下是awk 关系表达式的示例 :

awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'
Linux中的AWK命令及示例:如何使用AWK?

范围模式

Linux AWK命令用法示例:范围模式是由以逗号分隔的两个模式组成的模式。范围模式对模式一和模式二出现之间的每一行执行指定的操作。

例如:

awk '/clerk/, /manager/ {print $1, $2}' employees.txt
Linux中的AWK命令及示例:如何使用AWK?

上面的模式指示 awk 打印包含关键字“clerk”和“manager”的所有输入行。

特殊表达模式

特殊的表达式模式包括BEGINEND,表示程序初始化和结束。在BEGIN处理第一条记录之前,该模式匹配输入的开头。END在处理完最后一条记录后,该模式匹配输入的结尾。

例如,你可以指示 awk 在流程开始和结束时显示一条消息:

awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt
Linux中的AWK命令及示例:如何使用AWK?

组合模式

Linux中的AWK命令及示例:该awk命令允许用户使用逻辑运算符组合两个或多个模式。组合模式可以是模式的任何布尔组合。组合模式的逻辑运算符是:

  • || (或者)
  • && (和)
  • ! (不是)

例如:

awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt 
Linux中的AWK命令及示例:如何使用AWK?

输出打印第三个字段大于 10 且第四个字段小于 20 的记录的第一个和第二个字段。

Linux AWK命令使用教程:AWK 变量

awk命令具有内置字段变量,可将输入文件分成称为fields 的单独部分。的awk 受让人以下变量的每个数据字段:

  • $0. 用于指定整行。
  • $1. 指定第一个字段。
  • $2. 指定第二个字段。
  • 等等。

其他可用的内置awk变量是:

  • NR. 计算输入记录的数量(通常是行)。该awk命令对文件中的每个记录执行一次模式/操作语句。

例如:

awk '{print NR,$0}' employees.txt
Linux中的AWK命令及示例:如何使用AWK?

该命令在输出中显示行号。

  • NF. 计算当前输入记录中的字段数并显示文件的最后一个字段。

例如:

awk '{print $NF}' employees.txt
Linux中的AWK命令及示例:如何使用AWK?
  • FS. 包含用于分隔输入行上的字段的字符。默认分隔符是空格,但你可以使用FS将分隔符重新分配给另一个字符(通常在 中BEGIN)。

Linux如何使用AWK命令?例如,你可以通过将分隔符从冒号 ( ) 更改为破折号 ( ) 并打印出字段分隔符,从而使etc/passwd文件(用户列表)更具可读性::/

awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd
Linux中的AWK命令及示例:如何使用AWK?
  • RS. 存储当前记录分隔符。默认输入行是输入记录,这使换行符成为默认记录分隔符。如果输入是逗号分隔文件 (CSV),则该命令很有用。

例如:

awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt
Linux中的AWK命令及示例:如何使用AWK?

注意:我们首先使用cat 命令显示文件的内容,然后使用AWK.

  • OFS. 存储输出字段分隔符,打印时分隔字段。默认分隔符是一个空格。每当打印的文件有几个用逗号分隔的参数时,OFS就会在每个参数之间打印值。

例如:

awk 'OFS=" works as " {print $1,$3}' employees.txt
Linux中的AWK命令及示例:如何使用AWK?

AWK 动作

Linux AWK命令用法示例:该 awk 工具遵循包含模式-动作对的规则。动作由括在花括号中的语句组成,{}其中包含表达式、控制语句、复合语句、输入和输出语句以及删除语句。上面的部分描述了这些声明。

awk 使用以下语法创建 脚本:

awk '{action}' 

例如:

awk '{print "How to use the awk command"}'
Linux中的AWK命令及示例:如何使用AWK?

这个简单的命令指示 awk 每次运行命令时打印指定的字符串。使用Ctrl+D终止程序。

如何使用 AWK 命令 - 示例

Linux中的AWK命令及示例:除了操作数据和生成格式化输出之外, awk 还有其他用途,因为它是一种脚本语言,而不仅仅是一种文本处理命令。本节解释了 的替代用例 awk

  • 计算。该awk 命令允许你执行算术计算。例如:
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'
Linux中的AWK命令及示例:如何使用AWK?

在此Linux AWK命令用法示例中,我们通过管道输入df 命令并使用报告中生成的信息来计算名称中仅包含/dev/loop的已挂载文件系统可用和使用的总内存。

生成的报告在输出的第二列和第三列中显示了/dev/loop文件系统的内存总和df

  • 过滤。该awk命令允许你通过限制行的长度来过滤输出。例如:
awk 'length($0) > 8' /etc/shells
Linux中的AWK命令及示例:如何使用AWK?

Linux如何使用AWK命令?在此示例中,我们运行/etc/shells系统文件 awk 并过滤输出以仅包含包含超过 8 个字符的行。

  • 监控。通过管道输入<strong>ps</strong>命令检查某个进程是否在 Linux 中运行。例如:
ps -ef | awk '{ if($NF == "clipboard") print $0}'
Linux中的AWK命令及示例:如何使用AWK?

输出将打印在你的机器上运行的所有进程的列表,最后一个字段与指定的模式匹配。

  • 计数。你可以使用awk计算一行中的字符数并获取结果中打印的数字。例如:
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt
Linux中的AWK命令及示例:如何使用AWK?

Linux AWK命令使用教程总结

阅读这个Linux中的AWK命令及示例教程后,你将了解该awk命令是什么以及如何在各种用例中有效地使用它。

awk命令也是一种脚本语言有许多用途,它是每一个的Linux用户必备的知识。将其用于强大的文本操作,也可用作脚本语言。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: