zoukankan      html  css  js  c++  java
  • [sh]awk用法

    grep匹配第一个则停止

    grep -m
     -m num, --max-count=num
                 Stop reading the file after num matches.
    

    shell中的数组

    • 定义
    nums=(29 100 13 8 91 44)
    
    # 弱类型的
    arr=(20 56 "http://c.biancheng.net/shell/")
    
    • 添加元素

    awk将二维表转换为kv格式

    awk '
    {
      if(NR == 1) {
        for (i=2; i <= NF;i++) type[i]=$i
      }else {
        for (j=2;j <= NF; j++) arr[$1,type[j]]=$j
      }
    }
    END {
        for (k in arr) {
            split(k, idx, SUBSEP);
            gsub(/.|-/,"_",idx[1])
            gsub(//|(|)/,"_",idx[2])
            gsub(/False/,"0",arr[k])
            gsub(/True/,"1",arr[k])
            print "GamesvrOnline""{usage=""idx[2]"",GameSvr=""idx[1]""} "arr[k]
        }
    }' 
    
    nums[6]=88
    
    ages=([3]=24 [5]=19 [10]=12) # 只支持整型下标
    
    • 获取元素
    n=${nums[2]}
    
    # 获取所有元素
    ${nums[*]}
    ${nums[@]}
    
    • 实例
    nums=(29 100 13 8 91 44)
    echo ${nums[@]}  #输出所有数组元素
    nums[10]=66  #给第10个元素赋值(此时会增加数组长度)
    echo ${nums[*]}  #输出所有数组元素
    echo ${nums[4]}  #输出第4个元素
    
    29 100 13 8 91 44
    29 100 13 8 91 44 66
    91
    

    awk的for循环

    学习awk的内置变量,及默认值
    学习awk的内置函数

    awk中数组和shell中数组用法不一样. 它支持字符串下标

    awk一维数组

    a) 数字下标
    
    array[1]="it"
    array[2]="homer"
    array[3]="sunboy"
    array[4]=2050
    
    
    
    b) 字符下标
    
    array["first"]="yang"
    array["second"]="gang"
    array["third"]="sunboy"
    
    • 获取
    #!/bin/bash
     
    awk 'BEGIN{
    array[1]="it"
    array[2]="homer"
    array[3]="sunboy"
    array[4]=2050
     
     
    array["first"]="yang"
    array["second"]="gang"
    array["third"]="sunboy"
     
     
    print array[1], array[4]
    print array[3], array["third"]}'
    
    • 遍历
    #!/bin/bash
     
    awk 'BEGIN{
       for(i=1; i<=5; i++){
           array[i] = i*2 - 1;
       }
       for(i in array){
           print i" = " array[i];#i是下标, array[i]是对应的值
       }
    }'
    

    awk二维数组

    awk 多维数组在本质上是一维数组,因awk在存储上并不支持多维数组,
    awk提供了逻辑上模拟二维数组的访问方式。例如,array[2,3] = 1这样的访问是允许的。

    awk使用一个特殊的字符串SUBSEP (34)作为分割字段,
    在上面的例子 array[2,3] = 1 中,关联数组array存储的键值实际上是2343,
    2和3分别为下标(2,3),34为SUBSEP分隔符

    类似一维数组的成员测试,多维数组可以使用 if ( (i,j) in array) 语法,但是下标必须放置在圆括号中。
    类似一维数组的循环访问,多维数组使用 for ( item in array ) 语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量,格式: split ( item, subscr, SUBSEP), 例如: split (item, array2, SUBSEP); 后,array2[1]为下标“2”, array2[2]为下标“3”

    示例:

    #!/bin/bash
     
    awk 'BEGIN{
       for(i=1; i<=3; i++){
           for(j=1; j<=3; j++){
               array[i, j] = i * j;
               print i" * "j" = "array[i,j];
           }
       }
       print
       for(i in array){
           split(i, array2, SUBSEP);
           print array2[1]" * "array2[2]" = " array[i]; # array2[1]为下标第一项, array2[1]为下标第二项, 
       }
    }'
    
    • 内置函数

    [gsub(//|(|)/,"_",idx[2]) # 返回替换的次数.(https://blog.csdn.net/zhuying_linux/article/details/7104938)

    length

  • 相关阅读:
    [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)
    [ActionScript 3.0] 喷泉效果
    [ActionScript 3.0] AS3.0 下雨及涟漪效果
    [ActionScript 3.0] AS3.0 复制xml,并赋值
    [ActionScript 3.0] AS3.0 火焰效果
    [ActionScript 3.0] AS3.0 烟雾粒子效果
    Java学习之==>面向对象编程 Part1
    Java学习之==>int和Integer的区别和联系
    Java学习之==>数组【array】
    Java学习之==>条件判断、循环控制
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/13669057.html
Copyright © 2011-2022 走看看