HOME 生活记录运维/编程
作者/来源:yixinu.com
栏目:运维/编程
日期:2012-04-05 11:04:44


example:

过虑用户ID>=500账户并做统计

[root@desktop10 0405]# gawk -F: '{ if($3>=500){print $1,$3; count++}} END{print count}' /etc/passwd
nfsnobody 65534
student 500
visitor 501
3
[root@desktop10 0405]#




system函数

example: 


#!/bin/gawk

/^[^#:]/ { res=system("ping -c2 " $1 "&>/dev/null" );  #函数返回值由res接收
        if(res==0){
                print $1 " is online"
        }else{
                print $1 " is down"
        }
}





while循环

example:   打印passwd 列变成 行


[root@desktop10 0405]# gawk -F: '{print $0,"nn=========================;";lie=1;while(lie<=NF){print $lie; lie++} print "nn" }' /etc/passwd


example:


#!/bin/gawk
{
        print NR,"======================nn";
        for(lie=1;lie<=NF;lie++){
                print $lie;
        }
        print "nn";
}


1 ======================


root
x
0
0
root
/root
/bin/bash



2 ======================


bin
x
1
1
bin
/bin
/sbin/nologin
....



example:


[root@desktop10 0405]# gawk -F: '{print NR,"=====================n"; for(lie=1;lie<=NF;lie++){print lie,":",$lie;}print "n"}' /etc/passwd





数组

example:


[root@desktop10 0405]# cat file
tom	4424	54366
mary	5446	2488
bill	168814	58744
tom	4424	100
[root@desktop10 0405]# cat file | gawk '{names[$1]=$3}; END{ print names["tom"] }'
100
[root@desktop10 0405]# 



[root@desktop10 0405]# cat file | gawk '{names[$1]+=$3}; END{ print names["tom"] }'
54466


example: 用于数组的for循环  for(索引 in 数组){ 代码 }


[root@desktop10 0405]# cat file | gawk '{names[$1]+=$3}; END{ for(name in names){ print name,names[name]  }  }'
bill 58744
tom 54466
mary 2488


example:


[root@desktop10 0405]# cat ./test3.awk
#!/bin/gawk
{ names[$1]+=$3 };
END{
	for(name in names){
		print  name,names[name] 
	}
}




nextexit


example:

exit并不会绕过END段,所以通过 exits变量来判断 当前代码是否成功执行

#!/bin/awk
BEGIN{getline USER < "-"}
{
        if($1 ~ USER){
            exist=1;
            exit;
        }
}
END{
        if(exist){
           exit(0);
        }else{
           exit(-1);
        }
}

[root@bogon ~]# echo "root" | gawk -F: -f awk3.awk ./passwd 
[root@bogon ~]# echo $?
0
[root@bogon ~]# echo "rootssss" | gawk -F: -f awk3.awk ./passwd 
[root@bogon ~]# echo $?
255
[root@bogon ~]# 



example:   next的作用


#!/bin/awk
BEGIN{getline USER < "-"}
{
        i=1;
        while(i<NF){
           print i;
           if($i ~ USER){
              print "======",NR,"======";
              next;   
           }
          i++
        }
        print NR,"+++++"
}

[root@bogon ~]# echo "ftp" | gawk -F: -f awk4.awk ./passwd 
…………
12 +++++
1
2
3
4
5
6
13 +++++
1
====== 14 ======   #next使程序路过了循环,14行并没有输出,如果上面代码换成exit,则在该行停止循环
1
2
3
4
5
6
15 +++++
…………




处理命令行参数


    ARGC代表参数的总数

    ARGV 数组,保存输入的参数

example:


[root@bogon ~]# cat awk6.awk 
#!/bin/awk
BEGIN{
      for(pos=0;pos<ARGC;pos++){
          print ARGV[pos];
      }
}
[root@bogon ~]# gawk -f awk6.awk aa bb cc
gawk
aa
bb
cc
[root@bogon ~]# 



分享到:

Copyright © 2013-2014 yixinu.com 湘ICP备14004402号

QQ:316686606  Email: 316686606@qq.com