在 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

标签:awk,循环
0
投稿

猜你喜欢

  • 网络安全之小技巧保护(IIS)Web服务器

    2007-03-28 16:44:00
  • 分享高校论坛建设管理心得

    2007-08-05 12:33:00
  • 徐静蕾联手VANCL推出开啦饰品进军B2C告捷

    2009-11-12 14:14:00
  • 详解Linux多线程使用信号量同步

    2023-11-02 17:12:12
  • 从小切口看引擎对原创文章的抓取与排名

    2007-12-22 16:36:00
  • 微软收购雅虎的真正动机

    2008-07-25 19:27:00
  • 每个人都可以强大,只要懂什么是坚持

    2007-12-25 21:58:00
  • 安装Ubuntu 16.04后要做的事(总结)

    2023-05-27 06:05:11
  • .htaccess 顶级域名重定向绑定空间目录

    2023-08-31 19:29:29
  • Google AdSense 付款详解

    2007-09-08 08:43:00
  • 在阿里云购买云服务器并安装宝塔面板的步骤

    2022-09-09 00:45:21
  • Hishop用户首创B2M模式 “聚宝盆”将颠覆传统电子商务

    2009-10-30 17:04:00
  • docker环境搭建JMeter+Grafana+influxdb可视化性能监控平台的教程

    2023-11-02 14:39:30
  • 对百度收录新站的潜规则研究调查

    2008-11-27 17:57:00
  • 详解在Docker容器中运行Spring Boot应用

    2023-02-21 06:17:34
  • 防止GET和POST方式引起的SQL注入攻击ASP程序

    2007-08-06 12:57:00
  • 微软IE8测试版新特性详解

    2008-03-11 07:20:00
  • 浅论SEO行业优势与SEO团队优势

    2009-10-04 14:28:00
  • dedecms关键词长度修改统一说明

    2010-06-20 15:42:00
  • 一名成功站长的十大要点

    2008-02-22 14:38:00
  • asp之家 网站运营 m.aspxhome.com