在awk
中,循环处理主要涉及两种类型的循环:传统的for
循环和隐式的记录遍历。
1. for
循环
a) 初始化-测试-递增型 for
循环:
类似于其他编程语言中的for
循环,Awk也支持初始化、条件测试和递增操作的循环结构。例如,计算1到10的整数平方:
#!/usr/bin/awk -f
BEGIN {
for (i = 1; i <= 10; i++) {
print i, "to the second power is", i * i;
}
}
b) 遍历数组的 for
循环:
你还可以使用for
循环遍历数组元素:
{
# 假设有一个数组array
split("apple banana cherry", array)
for (i in array) {
print "Element at index " i " is ", array[i]
}
}
2. 隐式记录遍历
在Awk中,默认情况下每一行(或记录)都会被当作一个循环来处理。当你编写Awk脚本时,即使没有明确声明循环,Awk也会逐行读取输入文件或者标准输入,并对每一行执行指定的动作:
# 对于每一行($0代表当前行)
{
# 执行某些操作
print $0
}
这个过程实际上就是一个循环,只不过它不需要显式定义。你可以在花括号内放置任何需要对每一行执行的命令。
示例结合实际应用:
例如,在处理日志文件时,可以利用Awk的内置循环特性:
# 分析日志文件,打印出所有ERROR级别的行及其发生时间
awk '/ERROR/ {print "Error occurred at:", $1, $2}' logfile.log
在这个例子中,Awk会自动一行接一行地读取日志文件,当遇到包含"ERROR"的行时,执行打印操作。