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-else
, while
, for
, break
),还允许用户使用大括号对语句进行分组{}
。
- if-else
Linux中的AWK命令及示例:该语句通过评估括号中指定的条件来工作,如果条件为真,则执行该语句后面的语句。该部分是可选的。 if-elseif
else
例如:
awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt
输出显示线中存在的重复和国家没有重复,如果有行内没有重复的答案。
- while
Linux如何使用AWK命令?while
只要指定的条件为真,该语句就会重复执行目标语句。这意味着它的运行方式与 C 编程语言中的一样。如果条件为真,则执行循环体。如果条件为假,则 awk
继续执行。
例如,以下语句指示 awk
每行打印一个所有输入字段:
awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt
- for
该for
语句也像 C 一样工作,允许用户创建需要执行特定次数的循环。
awk 'BEGIN{for(i=1; i<=10; i++) print "The square root of", i, "is", i*i;}'
上面的语句将 的值增加i
一直到达到十并计算i
每次的平方根。
注意:if
, while
or条件部分的表达式for
可以包含关系运算符,例如<, , >=, ==
(等于)和!=
(不等于)。表达还可以包括与匹配运算符正则表达式匹配∼
和!∼
,逻辑运算符||, &&
,和!
。运算符用括号分组。
- break
该break
语句立即从封闭的while
or 中退出for
。要开始下一次迭代,请使用该continue
语句。
该next
语句指示 awk
跳到下一条记录并从顶部开始扫描模式。该exit
语句指示 awk
输入已结束。
以下是该break
语句的示例:
awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'
上面的命令在 5 次迭代后中断循环。
注意:该awk
工具允许用户在AWK
程序中放置注释。注释以行#
尾开始和结束。
AWK 模式
Linux中的AWK命令及示例:在操作前插入一个模式 awk
作为选择器。选择器决定是否执行一个动作。以下表达式可以用作模式:
- 常用表达。
- 算术关系表达式。
- 字符串值表达式。
- 上述表达式的任意布尔组合。
以下部分解释了上述表达式以及如何使用它们。
注意:了解如何使用grep 命令搜索字符串或模式。
正则表达式模式
正则表达式模式是最简单的表达式形式,其中包含用斜杠括起来的字符串。它可以是一系列字母、数字或两者的组合。
在以下示例中,程序输出所有以“A”开头的行。如果指定的字符串是更大单词的一部分,它也会被打印出来。
awk '$1 ~ /^A/ {print $0}' employees.txt
Linux AWK命令使用教程:关系表达模式
另一种类型的 awk
模式是关系表达模式。关系表达式模式涉及使用以下任何关系运算符:<、<=、==、!=、>=和>。
Linux如何使用AWK命令?以下是awk
关系表达式的示例 :
awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'
范围模式
Linux AWK命令用法示例:范围模式是由以逗号分隔的两个模式组成的模式。范围模式对模式一和模式二出现之间的每一行执行指定的操作。
例如:
awk '/clerk/, /manager/ {print $1, $2}' employees.txt
上面的模式指示 awk
打印包含关键字“clerk”和“manager”的所有输入行。
特殊表达模式
特殊的表达式模式包括BEGIN
和END
,表示程序初始化和结束。在BEGIN
处理第一条记录之前,该模式匹配输入的开头。END
在处理完最后一条记录后,该模式匹配输入的结尾。
例如,你可以指示 awk
在流程开始和结束时显示一条消息:
awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt
组合模式
Linux中的AWK命令及示例:该awk
命令允许用户使用逻辑运算符组合两个或多个模式。组合模式可以是模式的任何布尔组合。组合模式的逻辑运算符是:
||
(或者)&&
(和)!
(不是)
例如:
awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt
输出打印第三个字段大于 10 且第四个字段小于 20 的记录的第一个和第二个字段。
Linux AWK命令使用教程:AWK 变量
该awk
命令具有内置字段变量,可将输入文件分成称为fields 的单独部分。的awk
受让人以下变量的每个数据字段:
$0
. 用于指定整行。$1
. 指定第一个字段。$2
. 指定第二个字段。- 等等。
其他可用的内置awk
变量是:
NR
. 计算输入记录的数量(通常是行)。该awk
命令对文件中的每个记录执行一次模式/操作语句。
例如:
awk '{print NR,$0}' employees.txt
该命令在输出中显示行号。
NF
. 计算当前输入记录中的字段数并显示文件的最后一个字段。
例如:
awk '{print $NF}' employees.txt
FS
. 包含用于分隔输入行上的字段的字符。默认分隔符是空格,但你可以使用FS
将分隔符重新分配给另一个字符(通常在 中BEGIN
)。
Linux如何使用AWK命令?例如,你可以通过将分隔符从冒号 ( ) 更改为破折号 ( ) 并打印出字段分隔符,从而使etc/passwd文件(用户列表)更具可读性::/
awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd
RS
. 存储当前记录分隔符。默认输入行是输入记录,这使换行符成为默认记录分隔符。如果输入是逗号分隔文件 (CSV),则该命令很有用。
例如:
awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt
注意:我们首先使用cat 命令显示文件的内容,然后使用AWK
.
OFS
. 存储输出字段分隔符,打印时分隔字段。默认分隔符是一个空格。每当打印的文件有几个用逗号分隔的参数时,OFS
就会在每个参数之间打印值。
例如:
awk 'OFS=" works as " {print $1,$3}' employees.txt
AWK 动作
Linux AWK命令用法示例:该 awk
工具遵循包含模式-动作对的规则。动作由括在花括号中的语句组成,{}
其中包含表达式、控制语句、复合语句、输入和输出语句以及删除语句。上面的部分描述了这些声明。
awk
使用以下语法创建 脚本:
awk '{action}'
例如:
awk '{print "How to use the awk command"}'
这个简单的命令指示 awk
每次运行命令时打印指定的字符串。使用Ctrl+D终止程序。
如何使用 AWK 命令 - 示例
Linux中的AWK命令及示例:除了操作数据和生成格式化输出之外, awk
还有其他用途,因为它是一种脚本语言,而不仅仅是一种文本处理命令。本节解释了 的替代用例 awk
。
- 计算。该
awk
命令允许你执行算术计算。例如:
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'
在此Linux AWK命令用法示例中,我们通过管道输入df 命令并使用报告中生成的信息来计算名称中仅包含/dev和/loop的已挂载文件系统可用和使用的总内存。
生成的报告在输出的第二列和第三列中显示了/dev和/loop文件系统的内存总和df
。
- 过滤。该
awk
命令允许你通过限制行的长度来过滤输出。例如:
awk 'length($0) > 8' /etc/shells
Linux如何使用AWK命令?在此示例中,我们运行/etc/shells系统文件 awk
并过滤输出以仅包含包含超过 8 个字符的行。
- 监控。通过管道输入
<strong>ps</strong>
命令检查某个进程是否在 Linux 中运行。例如:
ps -ef | awk '{ if($NF == "clipboard") print $0}'
输出将打印在你的机器上运行的所有进程的列表,最后一个字段与指定的模式匹配。
- 计数。你可以使用
awk
计算一行中的字符数并获取结果中打印的数字。例如:
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt
Linux AWK命令使用教程总结
阅读这个Linux中的AWK命令及示例教程后,你将了解该awk
命令是什么以及如何在各种用例中有效地使用它。
该awk
命令也是一种脚本语言有许多用途,它是每一个的Linux用户必备的知识。将其用于强大的文本操作,也可用作脚本语言。