awk

 http://www.zsythink.net/archives/tag/awk/   参考 自总结中 centos

awk:逐行处理,默认以"换行符"为标记,识别每一行
awk基本语法:
awk[option]'Pattern{Action}'file
     选项    模式     动做


选项:awk -v FS='#'


模式:1 空模式 (空模式会匹配文本中的每一行)
     2 关系运算模式 (用到关系运算符:x<y;x!=y;x~/正则/)
     3 BEGIN/END模式 (BEGIN模式,表示开始处理文本以前执行的操做,END以后)
     4 正则模式 ( awk '/正则/{print $0}' /etc/passwd )
     5 行规范模式 ( awk '/正则/,/正则/{动做}' /etc/passwd )( awk 'NR>1 && NR<5 {print $0}' /etc/passwd )
          
     
动做:awk '{ print $0 }' test1.sh
     awk '{ print $1 }{ print $2 }' test1.sh 等同于 awk '{ print $1;print$2}' test1.sh
    

循环语句:
1/if 
     awk '{ if (条件){动做} }' file (若是'if'对应的大括号只有一条命令能够省略动做的大括号)
     awk -F ":" '{ if(条件){动做} else{动做} }' file
     awk '{ if(条件){动做} else if(条件){动做} else{动做}}' file

2/for
     awk '{ for(初始化;布尔;更新){动做}}' file
     awk '{ for(变量 in 数组){动做}}' file

3/while     
     awk '{ while(条件){动做}}' file
      awk 'do{动做}while(条件)' file(do...while和while的区别是do...while不管是否知足条件都会先执行一遍)

跳出循环:
continue的做用:跳出当前循环
next的做用:让awk直接从下一行开始运行;相似continue区别是continue针对'本次循环',而next针对'逐行处理'
break的做用:跳出整个循环
exit表示退出当前脚本;当有END模式时,会直接执行END动做再退出


分隔符形式 1:awk -F#
           2:awk -v FS='#'(-v 自定义函数)

数组:
     1 awk数组的第1个下标是1,能够本身设置下标从0开始
     2 数组元素能够为"",即"空字符串"是存在的,todd[3]="";if(4 in todd){print "exist"}
                                               if(下标 in 数组名),判断数组中是否存在对应元素

{count[$1]++}{for(i in count)} count是数组名,因为引用的数组不存在,因此会建立下标为改内容的元素,
且元素值在自加后为1,当再次遇到该元素时,因为下标同样的元素存在且值为1,故会在1的基础上自加,这样就能够起到计数的功能。


内置函数:算数函数、字符串函数、时间函数、其余函数等
算数函数:rand(随机生成值不变0-1),srand(随机生成值变化0-1),int( int(100*rand())生成1-100随机整数 )
字符串函数:gsub(指定范围内的全局替换),sub(指定范围内的单次替换,只替换第一次匹配到的字符)
           length(可使用index函数指定字符位于整个字符串的位置),
           split函数( split(ts,huan,":"); 动态建立数组) 
           asort函数(根据元素的值进行排序,可是通过asort函数排序事后的数组的下标会被重置)
           asorti函数(根据下标进行排序,生成新数组)

           例:
[root@centos68 awk]# awk 'BEGIN{ t["z"]=66;t["q"]=88;t["a"]=3; \
> len=asorti(t,newt); \
> for(i=1;i<=len;i++){print i,newt[i],t[newt[i]]} }'
1 a 3
2 q 88
3 z 66


三元运算符:可代替"if...else语句"
           即 条件 ? 结果1 : 结果2
           


1、在awk中,若是省略了模式对应的动做,当前行知足模式时,默认动做为打印整行,即{print $0}
2、在awk中,0或者空字符串表示"",非0值或者非空字符串表示""

据此能够打印出奇偶行
奇:awk 'i=!i' file
偶: awk '!(i=!i)' file
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息