跳到主要内容

[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

循环中的关键字

关键字说明
breakbreak 语句用于 whilefor 语句时,导致退出程序循环
continuecontinue 语句用于 whilefor 语句时,使程序循环移动到下一个迭代
next能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程
exit语句使主输入循环退出并将控制转移到 END ,如果 END 存在的话。如果没有定义 END 规则,或在 END 中应用 exit 语句,则终止脚本的执行
Right Bottom Gif
Right Top GIF