[toc]
awk循环
for循环
c语言格式
c语言格式语法
for(初始值;终止值;步长值){语句}
示例
示例1:循环打印指定条件的数字
$ awk 'BEGIN{for(i=1;i<=5;i++){print i}}'
1
2
3
4
5
示例2:将 /etc/passwd
文件每一行打印2次
$ awk -F: '{for(i=1;i<3;i++){print $0}}' /etc/passwd|head -10
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
列表格式
列表格式语法
for(变量 in 数组){语句}
示例
$ awk 'BEGIN{a[0]=10;a[1]=11;for(i in a) print i,a[i]}'
0 10
1 11
while循环
语法格式
while(条件){语句}
示例
语句示例:打印指定范围的数字
$ awk 'BEGIN{i=1;while(i<6){print i;i++}}'
1
2
3
4
5
awk文件示例
编辑awk脚本,作用是
- 左移 第 2 到倒数第 2 个字段
- 将原始的第 2 个字段移动到倒数第 2 位置
cat > awk.awk <<'EOF'
#!/usr/bin/awk
#
BEGIN{
FS=":" # 设置输入字段分隔符为 ":"
OFS=":" # 设置输出字段分隔符为 ":"
}
{
t=$2; # 备份第二个字段
i=2; # 变量 i 初始化为 2
while(i<NF-1) { # 遍历第 2 到倒数第 2 个字段
$i = $(i+1); # 当前字段替换为下一个字段
i++;
}
$(NF-1) = t; # 倒数第二个字段赋值为最初的第二个字段
print($0); # 打印整行
}
EOF
执行awk脚本
$ echo "a:b:c:d:e" | awk -f awk.awk
d:b:c:b:e
do while循环
语法
do {语句} while(条件)
示例
示例:计算1-100的和
$ awk 'BEGIN{do{sum+=i;i++}while(i<101)print sum}'
5050
循环中的关键字
关键字 | 说明 |
---|---|
break | 当 break 语句用于 while 或 for 语句时,导致退出程序循环 |
continue | 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代 |
next | 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程 |
exit | 语句使主输入循环退出并将控制转移到 END ,如果 END 存在的话。如果没有定义 END 规则,或在 END 中应用 exit 语句,则终止脚本的执行 |