本篇内容介绍了“怎么在awk中使用循环”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!awk 脚本有三个主要部分:BEGIN 和 END 函数
本篇内容介绍了“怎么在awk中使用循环”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
awk
脚本有三个主要部分:BEGIN
和 END
函数(都可选),用户自己写的每次要执行的函数。某种程度上,awk
的主体部分就是一个循环,因为函数中的命令对每一条记录都会执行一次。然而,有时你希望对于一条记录执行多次命令,那么你就需要用到循环。
有多种类型的循环,分别适合不同的场景。
一个 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
之后的命令。在每次循环结束时检测一个测试表达式来决定是否终止循环。仅在测试表达式返回 true
时才会重复执行命令(即还没有到终止循环的条件)。如果测试表达式返回 false
,因为到了终止循环的条件所以循环被终止。
#!/usr/bin/awk -fBEGIN { i=2; do { print i, " to the second power is ", i*i; i = i + 1 } while (i < 10) exit;}
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 amountapple red 4banana yellow 6raspberry red 99strawberry red 3grape purple 10apple green 8plum purple 2kiwi brown 4potato brown 9pineapple 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中使用循环”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
--结束END--
本文标题: 怎么在awk中使用循环
本文链接: https://lsjlt.com/news/282400.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0