zoukankan      html  css  js  c++  java
  • awk 数组实例(转)

    awk 数组实例

    awk的数组,一种关联数组(Associative Arrays),下标可以是数字和字符串。因无需对数组名和元素提前声明,也无需指定元素个数 ,所以awk的数组使用非常灵活。

    首先介绍下几个awk数组相关的知识点:

    <1>建立数组

    array[index] = value :数组名array,下标index以及相应的值value

    <2>读取数组值

    { for (item in array)  print array[item]} # 输出的顺序是随机的

    {for(i=1;i<=len;i++)  print array[i]} # Len 是数组的长度

    <3>多维数组,array[index1,index2,……]SUBSEP是数组下标分割符,默认为“\034”。可以事先设定SUBSEP,也可以直接在SUBSEP的位置输入你要用的分隔符,如:

    awk 'BEGIN{SUBSEP=":";array["a","b"]=1;for(i in array) print i}'

    a:b

    awk 'BEGIN{array["a"":""b"]=1;for(i in array) print i}'

    a:b

    但,有些特殊情况需要避免,如:

    awk 'BEGIN{

    SUBSEP=":"

    array["a","b:c"]=1               # 下标为“a:b:c”

    array["a:b","c"]=2               #下标同样是“a:b:c”

    for (i in array) print i,array[i]}'

    a:b:c 2                        #所以数组元素只有一个。

    <4>删除数组或数组元素: 使用delete 函数

    delete array                     #删除整个数组

    delete array[item]           # 删除某个数组元素(item

    <5> 排序:awk中的asort函数可以实现对数组的值进行排序,不过排序之后的数组下标改为从1到数组的长度。在gawk 3.1.2以后的版本还提供了一个asorti函数,这个函数不是依据关联数组的值,而是依据关联数组的下标排序,即asorti(array)以后,仍会用数字(1到数组长度)来作为下标,但是array的数组值变为排序后的原来的下标,除非你指定另一个参数如:asorti(a,b)。(非常感谢lionfunasorti的指正和补充)

    cat test

    2 d

    3 t

    6 a

    8 b

    g u

    m c

    0 d

    5 e

    awk '{a[$1]=$2;}END{len=asorti(a); for(i=1;i<=len;i++) print i,a[i]}' test

    1 0

    2 2

    3 3

    4 5

    5 6

    6 8

    7 g

    8 m

    awk '{a[$1]=$2;}END{len=asorti(a,b); for(i=1;i<=len;i++) print i,b[i],a[b[i]]}' test #利用asort函数对数组a的值排序,同时获得数组长度len

    1 0 d

    2 2 d

    3 3 t

    4 5 e

    5 6 a

    6 8 b

    7 g u

    8 m c

    原文:

    http://www.51testing.com/?uid-363787-action-viewspace-itemid-242169

  • 相关阅读:
    阿里云:面向5G时代的物联网无线连接服务
    走近科学,探究阿里闲鱼团队通过数据提升Flutter体验的真相
    Redis 5.0新功能介绍
    阿里云发布 Redis 5.0 缓存服务:全新 Stream 数据类型带来不一样缓存体验
    荣获“5G MEC优秀商用案例奖”,阿里云边缘计算发力新零售
    阿里云亮相2019联通合作伙伴大会,边缘计算等3款云产品助力5G时代产业数字化转型
    noip2014 寻找道路
    noip2014 无线网络发射器选址
    noip2014 联合权值
    noip2013 华容道
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2873020.html
Copyright © 2011-2022 走看看