• awk数组简介


    一、定义

    在 awk 中,数组是关联数组,它的特点是:

    1、 数组的下标可以是整数,也可以是负数甚至是字符串

    2、 数组的下标可以不连续。

    Awk 的变量 IGNORECASE 的值不影响数组下标。

    当 awk 创建一个数组的时候,如果没有指定下标,默认已连续整数作为下标,起始值是 1.

    Awk 的数组是什么高效的,访问一个元素的时间跟元素的数量无关。

    注: awk 的下标其实都是字符串,如我们输入的是数字 1 awk 会自动的转换为字符串“ 1 ”

    二、引用元素

    引用 awk 元素的基本方法是:

    ARRAY[INDEX]

    注: 在此引用方式中除非 [ ] 中写的是变量,否则需要添加双引号,即字符串必需添加双引号的规则在数组的下标中也必需遵守,但如果下标是全数字,则可以不加引号,例:

    Bb=“123”

    arr[bb] awk bb 认作变量,获取的是 arr[“123”] 的值

    arr[234] awk 234 认作字符串,虽然 234 没加引号。因为变量的定义不能用全数字,所以 234 肯定是字符串,而不是变量。

    arr[“ bb” ] awk bb 认作字符串,获取的是 arr[“bb”] 的值

    有时候,数组的 value 会为空。 value 为空的元素包含两种情况 1 、本身 value 为空 2 、通过 delete 删除后的元素。这两种情况都可以被正常引用。但不幸的是,如果引用了一个不存在的元素,会导致 awk 创建这个元素, value 为空,这样,会导致 awk 的内存浪费。

    如果要查询具有某个 index 值的元素是否存在可以用如下的表达式:

    INDEX in ARRAY

    这个表达式仅仅测试具有 INDEX 的元素在 ARRAY 中是否存在。如果不存在,该表达式不会导致产生以 INDEX 为下标的 value 为空的元素。

    如果元素存在,该表达式返回值 1 true

    反之,返回 0 false

    例:测试在数组 frequencies 中是否存在下标为 2 的元素

    if (2 in frequencies)

    print “Sub 2 is present.”

    注: 不能测试 frequencies 中是否存在 value 2 的元素,除非 scan 数组中的所有元素。

    三、给元素赋值

    给 awk 的数组赋值,只能采用如下形式:

    ARRAY[SUB] = VALUE

    ARRAY :数组名字

    SUB :下标

    VALUE :值

    注: awk 可以生成下标为空的元素,但是引用方式必需是 arr[ “” ], 而不是 arr[]

    length(a) 求得数组中元素的个数。

    四、遍历数组

    在使用数组的程序里,经常会使用一个循环让数组里的每一个元素都执行一次某一个操作。在其他程序里,数组的下标是连续的正整数,因此所有的下标很容易通过从低到高实现遍历。但这个方法在 awk 里不能使用,因为 awk 的下标可以是数字也可以是字符串。因此, awk 使用一种特别的语句来遍历数组里的元素:

    for (VAR in ARRAY)

    BODY

    以上的循环将实现让数组 ARRAY 里的每一个元素都执行一次 BODY

    以下程序的第一部分,将输入文本的每一个单词都作为下标存放入数组,如单词有重复,仅仅保留一个,因数组的下标是不能重复的。

    五、删除元素

    删除单个元素

    delete ARRAY[INDEX]

    删除整个数组方法 1

    for (VAR in ARRAY)

    delete ARRAY[VAR]

    删除整个数组方法 2 (该方法 gawk 专用,可移植性差,但效率是方法 1 3 倍左右)

    delete ARRAY

    Awk 的数组和变量用的是同一个地址空间,数组的名字和变量不能重名。即使数组删除了也不能将名字用于变量命名,以下命令会报错:

    a[1] = 3; delete a; a = 3

    六、数组赋值

    单个赋值: Tarray[1]="cheng mo"  Tarray[2]="800927"

    多个赋值:awk 'BEGIN{info="it is a test"; lens=split(info,tA," "); print length(tA), lens, tA[1];}'

    原文:

    http://blog.csdn.net/xrzs1986/article/details/6261926

  • 相关阅读:
    Block深入浅出
    JSPatch 遇上swift
    iPhone左下角app图标
    Handoff使用指南
    实习任务——导出excel
    实习任务——对查询结果进行筛选过滤
    Markdown基本语法
    学习笔记(二)——类加载及执行顺序
    #学习笔记(一)——static
    写给过去的3年,拥抱2016
  • 原文地址:https://www.cnblogs.com/mydomain/p/2827257.html
Copyright © 2020-2023  润新知