[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