zoukankan      html  css  js  c++  java
  • awk

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

    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
  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/shiina-ringo/p/9857776.html
Copyright © 2011-2022 走看看