在 awk 中使用循环
作者:Seth Kenlon 发布时间:2021-10-17 23:46:40
来学习一下多次执行同一条命令的不同类型的循环。
awk 脚本有三个主要部分:BEGIN 和 END 函数(都可选),用户自己写的每次要执行的函数。某种程度上,awk 的主体部分就是一个循环,因为函数中的命令对每一条记录都会执行一次。然而,有时你希望对于一条记录执行多次命令,那么你就需要用到循环。
有多种类型的循环,分别适合不同的场景。
while 循环
一个 while 循环检测一个表达式,如果表达式为 true 就执行命令。当表达式变为 false 时,循环中断。
#!/bin/awk -f
BEGIN {
# Loop through 1 to 10
i=1;
while (i <= 10) {
print i, " to the second power is ", i*i;
i = i+1;
}
exit;
}
在这个简单实例中,awk 打印了放在变量 i 中的整数值的平方。while (i <= 10) 语句告诉 awk 仅在 i 的值小于或等于 10 时才执行循环。在循环最后一次执行时(i 的值是 10),循环终止。
do-while 循环
do-while 循环执行在关键字 do 之后的命令。在每次循环结束时检测一个测试表达式来决定是否终止循环。仅在测试表达式返回 true 时才会重复执行命令(即还没有到终止循环的条件)。如果测试表达式返回 false,因为到了终止循环的条件所以循环被终止。
#!/usr/bin/awk -f
BEGIN {
i=2;
do {
print i, " to the second power is ", i*i;
i = i + 1
}
while (i < 10)
exit;
}
for 循环
awk 中有两种 for 循环。
一种 for 循环初始化一个变量,检测一个测试表达式,执行变量递增,当表达式的结果为 true 时循环就会一直执行。
#!/bin/awk -f
BEGIN {
for (i=1; i <= 10; i++) {
print i, " to the second power is ", i*i;
}
exit;
}
另一种 for 循环设置一个有连续索引的数组变量,对每一个索引执行一个命令集。换句话说,它用一个数组“收集”每一条命令执行后的结果。
本例实现了一个简易版的 Unix 命令 uniq。通过把一系列字符串作为键加到数组 a 中,当相同的键再次出现时就增加键值,可以得到某个字符串出现的次数(就像 uniq 的 --count 选项)。如果你打印该数组的所有键,将会得到出现过的所有字符串。
用演示文件 colours.txt(前一篇文章中的文件)来举例:
name color amount
apple red 4
banana yellow 6
raspberry red 99
strawberry red 3
grape purple 10
apple green 8
plum purple 2
kiwi brown 4
potato brown 9
pineapple yellow 5
这是 awk 版的简易 uniq -c:
#! /usr/bin/awk -f
NR != 1 {
a[$2]++
}
END {
for (key in a) {
print a[key] " " key
}
}
示例数据文件的第三列是第一列列出的条目的计数。你可以用一个数组和 for 循环来按颜色统计第三列的条目。
#! /usr/bin/awk -f
BEGIN {
FS=" ";
OFS="\t";
print("color\tsum");
}
NR != 1 {
a[$2]+=$3;
}
END {
for (b in a) {
print b, a[b]
}
}
你可以看到,在处理文件之前也需要在 BEFORE 函数(仅仅执行一次)中打印一列表头。
循环
在任何编程语言中循环都是很重要的一部分,awk 也不例外。使用循环你可以控制 awk 脚本怎样去运行,它可以统计什么信息,还有它怎么去处理你的数据。我们下一篇文章会讨论 switch、continue 和 next 语句。
ps:awk-for循环简单用法
文本:
[root@VM_0_84_centos ~]# cat sshd.txt
1 2 3
4 5 6
7 8 9
循环打印上述文本
for 循环的固定格式 i=1设置i的初始变量 i<=NF i变量小于等于 NF变量的值(每行的字段数) i++ 表示i递增+1,
[root@VM_0_84_centos ~]# cat sshd.txt |awk '{for(i=1;i<=NF;i++){print $i}}'
1
2
3
4
5
6
7
8
9
总结
以上所述是小编给大家介绍的在 awk 中使用循环网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://linux.cn/article-11636-1.html
猜你喜欢
- 1、网关主机设置 服务器上有两块网卡,eth0使用*.*.*.*IP地址连接Internet,eth1连接LAN,则其/etc/n
- 下述设置以时钟源服务器IP地址为192.168.0.1为例。可以命令ntpstat 和 ntpq -p 查看本机NTPD服务状态。配置完成后
- 环境说明: 操作系统: centos7 64位 3台&n
- 前段时间自己的一个网站进沙盒了,心里很是着急,现在这个网站终于走出google的沙盒了,现在和大家分享下 ,其实对待网站进沙盒如何让网站尽快
- 现在的个人站长依靠Google广告,收入明显地比过去两年减少,从而不少站长都转向做英文站,以获得高额收入,对于新朋友来说,做英文站可不像脑中
- 芯片商的用户争夺战升级昨天,电脑芯片商AMD公司在京正式发布VISION技术,其中文名称为“视·觉
- 大家在投放google adwords广告的时候,可能一开始就是想要带来流量,但是谁投放广告不是想挣钱,给自己带来客户呢,但是通过你投放的g
- 一、概念篇在介绍排查DHCP故障之前首先为大家阐明几个概念性的东西,只有理论上充实了,才能更好的理解下面介绍的故障排除的思路。第一:DHCP
- 如果你已经购买了一款服务器,但仍然觉得其“动力”不够强劲,不妨试试下面列出的几个办法,许多情况下,它们往往能够起到事半功倍的效果。1.增加内
- 目前,国内外的SEO都在研究Google排名的因素,据说有三百多种。不过能够把握的无非都是最基本的那几种。只要你能够针对你的网站把以下几方面
- 2009年5月19日21时起,在中国北京、天津、上海、河北、山西、安徽、湖北、广东、广西等省陆续出现互联网网络故障,使用电信网络服务的网民上
- 在支付宝昨天宣布邀请50万用户参与其个人版公测之后,今天已经陆续有部分用户得以进入该新系统进行体验。以下为支付宝个人版相关页面:一、体验版欢
- 无论是做什么事情,有一颗平常心是非常必要的。但是往往很少有人做到,于是做到的人成功了,更多的人在成功的门外徘徊不前。当然对于成功,不同人有不
- 根据对一些站长的最新调查显示,百度收录新网站的大约时间是2周。也就是说,新站做好了,需要等2周时间才能在百度收录。只有很少一部分幸运的站长,
- 简介yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件
- ubuntu系统默认root用户是不能登录的,密码也是空的。如果要使用root用户登录,必须先为root用户设置密码 打开终端,输入:sud
- Apache是世界上占用率最大的web服务器软件,以安装、稳定而著称,默认安装后有一些限制较为宽松,可进一步设置加固其安全。1.隐藏版本信息
- 随着3G网络的完善以及手持终端的快速增长,亚洲最大的网络零售商圈淘宝网也加速了其无线战略部署。5月12日,淘宝网正式对外发布了手机版旺旺,目
- 发现问题在su root时发现无法切换到root权限.显示: /usr/local/bin/zsh 没有文件或目录想了想问题所在,突然想起来
- docker容器下配置jupyter notebook,主要是为了编写python代码,更具体点是做深度学习的开发。jupyter web形