跳到主要内容

[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语句,则终止脚本的执行