awk选项
awk 命令的使用方式如下:
awk options program file
我们将了解如何使用awk
处理文件和打印结果。
读取AWK脚本
要定义awk
脚本,请使用用单引号括起来的大括号,如下所示:
awk '{print "Welcome to awk command tutorial "}'
如果您键入任何内容,它将返回我们提供的相同欢迎字符串。如下图所示:
要终止程序,请按Ctrl+D
。看起来很棘手,不要惊慌,最好的还没有到来。
使用变量
使用awk
,可以处理文本文件。Awk
为找到的每个数据字段分配一些变量:
$0
:是输出整行的内容。$1
:是输出第一个字段。$2
:是输出第二个字段。$n
:表示第n个字段。
在awk中,空格或制表符等空白字符是字段之间的默认分隔符。看看这个例子,看看awk是如何处理它的:
上面的示例打印了每行的第一个单词。
有时某些文件中的分隔符不是空格或tab
,而是其他内容。您可以使用–F
选项指定它:
awk -F ':' '{print $1}' /etc/passwd
此命令将打印passwd
文件中的第一个字段。我们使用冒号作为分隔符,因为passwd
文件使用它。
使用多个命令
要运行多个命令,请用分号分隔它们,如下所示:
root@didiplus:~# echo "Hello Tom" | awk '{$2="Adam"; print $0}'
Hello Adam
从文件中读取脚本
您可以在文件中键入awk脚本,并使用 -f
选项指定该文件。我们的文件包含以下脚本:
{print $1 " home at " $6}
awk -F: -f testfile /etc/passwd
在这里,我们从 /etc/passwd
打印用户名和他的主路径,当然分隔符是用大写的-F
指定的,即冒号。
你可以像这样awk
脚本文件:
{
text = $1 " home at " $6
print text
}
awk预处理
如果您需要为结果创建标题或表头等。您可以使用BEGIN
关键字来实现此目的。它在处理数据之前运行:
awk 'BEGIN {print "this Title"} {print $0}' myfile
执行上述代码输入如下图的结果:
awk后处理
要在处理数据后运行脚本,请使用END
关键字:
awk 'BEGIN {print "this Title"} {print $0} END {print "this footer"}' myfile
执行上述代码输出如下图的结果:
这很有用,例如,您可以使用它来添加页脚。让我们将它们组合到一个脚本文件中:
BEGIN {
print "Users and thier corresponding home"
print " UserName t HomePath"
print "___________ t __________"
FS=":"
}
{
print $1 " t " $6
}
END {
print "The end"
}
首先,使用BEGIN
关键字创建顶部部分。然后我们定义FS
并在末尾打印页脚。
awk '{print "Welcome to awk command tutorial "}'
0
内置变量
我们看到数据字段变量$1
,$2
,$3
等用于提取数据字段,我们还处理字段分隔符FS
。
但这些并不是唯一的变量,还有更多的内置变量。
下面列出了一些内置变量:
FIELDWIDTHS
:指定字段宽度。RS
:指定记录分隔符。FS
:指定字段分隔符。OFS
:输出分隔符。ORS
:输出分隔符。
默认情况下,OFS
变量是空格,你可以设置OFS变量来指定你需要的分隔符:
awk '{print "Welcome to awk command tutorial "}'
1
有时,字段的分布没有固定的分隔符。在这些情况下,FIELDWIDTHS
变量可以解决问题。
假设我们有以下内容:
awk '{print "Welcome to awk command tutorial "}'
2
awk '{print "Welcome to awk command tutorial "}'
3
查看输出。输出字段为每行3个,每个字段长度都基于我们由FIELDWIDTH
分配的字段。
更多的变量
还有一些其他变量可以帮助你获取更多信息:
ARGC
:获取传递的参数数量。ARGV
:获取命令行参数。ENVIRON
:shell环境变量及其对应值的数组FILENAME
:awk处理的文件名。NF
:Fields
正在处理的行数。NR
:检索处理过的记录总数。FNR
:被处理的记录。IGNORECASE
:忽略字符的大小写。
让我们测试一下。
awk '{print "Welcome to awk command tutorial "}'
4
ENVIRON
变量检索shell环境变量,如下所示:
awk '{print "Welcome to awk command tutorial "}'
5
您可以使用不带ENVIRON
变量的 bash 变量,如下所示:
awk '{print "Welcome to awk command tutorial "}'
6
NF
变量指定记录中的最后一个字段,但不知道其位置:
awk '{print "Welcome to awk command tutorial "}'
7
让我们看一下这两个例子来了解FNR
和NR
变量之间的区别:
awk '{print "Welcome to awk command tutorial "}'
8
在此示例中,awk
命令定义两个输入文件。相同的文件,但处理了两次。输出是第一个字段值和FNR
变量。
现在,检查NR变量并查看差异:
awk '{print "Welcome to awk command tutorial "}'
9
用户自定义变量
变量名称可以是任何内容,但不能以数字开头。您可以像在shell脚本中一样分配变量,如下所示:
awk -F ':' '{print $1}' /etc/passwd
0
执行上述命令后,输出如下结果:
结构化命令
if循环
awk
脚本语言支持if
条件语句。testfile
包含以下内容:
awk -F ':' '{print $1}' /etc/passwd
1
awk -F ':' '{print $1}' /etc/passwd
2
如果要运行多个语句,则应使用大括号:
awk -F ':' '{print $1}' /etc/passwd
3
您可以使用如下所示的else
语句:
awk -F ':' '{print $1}' /etc/passwd
4
或者在同一行中键入它们,并用分号分隔 if 语句,如下所示:
awk -F ':' '{print $1}' /etc/passwd
5
while循环
您可以使用while
循环遍历具有条件的数据。
awk -F ':' '{print $1}' /etc/passwd
6
您可以使用break
命令退出循环,如下所示:
awk -F ':' '{print $1}' /etc/passwd
7
for循环
awk
脚本语言支持for
循环:
awk -F ':' '{print $1}' /etc/passwd
8
格式化打印
awk
中的printf
命令允许你使用格式说明符打印出格式化的输出。
格式说明符如下所示:
awk -F ':' '{print $1}' /etc/passwd
9
下面列出了可用于printf
的格式说明符:
c
:以字符串的形式打印数值输出。d
:打印一个整数值。e
:打印科学数字。f
:打印浮点数。o
:打印一个八进制值。s
:打印文本字符串。
这里我们使用printf
来格式化输出:
root@didiplus:~# echo "Hello Tom" | awk '{$2="Adam"; print $0}'
Hello Adam
0
内置函数
Awk
提供了几个内置函数,例如:
数学函数
如果你喜欢数学,你可以在awk
脚本中使用这些函数:
sin(x)
cos(x)
sqrt(x)
exp(x)
log(x)
rand()
而且它们可以正常使用:
root@didiplus:~# echo "Hello Tom" | awk '{$2="Adam"; print $0}'
Hello Adam
1
字符串函数
有很多字符串函数,你可以查看列表,但我们将其中一个作为示例来研究,其余的都是一样的:
root@didiplus:~# echo "Hello Tom" | awk '{$2="Adam"; print $0}'
Hello Adam
2
用户自定义函数
您可以定义您的函数并像这样使用它们:
root@didiplus:~# echo "Hello Tom" | awk '{$2="Adam"; print $0}'
Hello Adam
3
在这里,我们定义了一个名为myprint
的函数,然后在脚本中使用它通过printf
函数打印输出。
总结
AWK是一款功能强大的数据处理工具,它能够高效地处理复杂的文本文件和数据集。无论你是需要处理日志、统计数据,还是生成格式化的报表,AWK都能轻松胜任。通过熟练掌握AWK命令,你可以极大提升工作效率,轻松应对各种数据处理任务。
推荐阅读
RECRUIT
关注我们
博客 | didiplus.kwpmp.cn
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...