[toc]
awk循环
1.for循环
1.1 c格式
1.1.1 c格式语法
for(初始值;终止值;步长值){语句}
1.1.2示例
//示例1
[root@test1 ~]# awk 'BEGIN{for(i=1;i<=5;i++){print i}}'
1
2
3
4
5
//示例2,将/etc/passwd文件每一行打印2次
[root@k8s-master ~]# 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
1.2 列表格式
1.2.1 列表格式语法
for(变量 in 数组){语句}
1.2.2 示例
[root@test1 ~]# awk 'BEGIN{a[0]=10;a[1]=11;for(i in a) print i,a[i]}'
0 10
1 11
2.while循环
2.1 语法格式
while(条件){语句}
2.2 示例
语句示例
//打印1-5
[root@test1 ~]# awk 'BEGIN{i=1;while(i<6){print i;i++}}'
1
2
3
4
5
//骚操作
文件txt.txt内容如下
1 2
3 4 5
6 7 8 9
[root@test1 ~]# awk '{i=1;while(i<=NF){print $1;i++}}' txt.txt
1
1
3
3
3
6
6
6
6
awk文件示例
//用awk获取文件中第三列到倒数第二列字段
[root@test1 ~]# cat > awk.awk <<'EOF'
#!/usr/bin/awk
#
BEGIN{
FS=":"
OFS=":"
}
{
t=$2;
i=2;
while(i<NF-1)
{
$1=$(i+1);
i++;
}
$(NF-1)=t;
print($0);
}
EOF
awk -f awk.awk /etc/passwd
3.do while循环
3.1 语法
do {语句} while(条件)
3.2 示例
示例:计算1-100的和
[root@test1 ~]# 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语句,则终止脚本的执行