• 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
  • 相关阅读:
    vue-cli生成的重要代码详解
    vuex初探
    vue-router笔记
    新技术的学习
    图片优化方法(有时间看看)
    关于老教授之家项目的思考 && 中国互联网+大赛培训
    If you are tired...
    微信公众平台开发初探
    winscp介绍与使用
    获取当前服务器信息
  • 原文地址:https://www.cnblogs.com/shiina-ringo/p/9857776.html
Copyright © 2020-2023  润新知