awk复杂用法变量与数组

简介: awk复杂用法变量与数组

在AWK中,变量和数组是其强大功能的基础部分。AWK支持两种类型的数组:索引数组(类似于C语言中的整数索引数组)和关联数组(也称为哈希表或字典,其中的键可以是字符串)。以下是一些关于AWK中复杂用法的变量与数组的例子:

变量:

  1. 定义和使用变量

    BEGIN {
        var = "Hello, World!"
        print var
    }
    

    在BEGIN块中定义了一个变量var并赋值,然后打印它的内容。

  2. 动态变量名

    BEGIN {
        column_name = "age"
        value = 30
        printf "%s=%d\n", column_name, value
        vars[column_name] = value    # 使用动态变量名创建关联数组元素
    }
    END {
        print vars["age"]            # 输出关联数组中age字段的值
    }
    

数组:

  1. 索引数组

    {
        array[NR] = $1               # 将每一行的第一个字段存入数组,NR为内置变量,表示当前记录号(即行号)
    }
    END {
        for (i = 1; i <= NR; i++) {
            print "Record ", i, ": ", array[i]
        }
    }
    

    上述代码将每行的第一个字段按行号存入数组,并在END块中遍历输出。

  2. 关联数组

    BEGIN {
        split("apple:1 banana:2 cherry:3", fruits, /:/)  # 从字符串创建关联数组
    }
    {
        if ($1 in fruits) {                           # 检查字段是否存在于关联数组中
            print $1, "has count:", fruits[$1]
        }
    }
    

    这里创建了一个关联数组fruits,键是水果名称,值是对应的数量。

  3. 复合操作

    NR == FNR {                     # 第一个文件处理阶段
        names[$1] = $2              # 假设第一列是姓名,第二列是年龄,建立关联数组
        next
    }
    $1 in names {                   # 当读取第二个文件时,如果第一列存在于names数组中
        print $0, "Age:", names[$1]  # 打印当前行及对应的名字对应的年龄
    }
    

    上述脚本在处理两个输入文件时,首先用第一个文件的数据填充一个关联数组,然后在处理第二个文件时,查找匹配项并打印附加信息。

  4. 遍历关联数组

    END {
        for (name in names) {        # 遍历关联数组的所有键
            print "Name:", name, "Age:", names[name]
        }
    }
    

    这段代码将在程序结束时遍历并打印出所有存储在关联数组names中的姓名及其对应的年龄。

总之,AWK中的变量和数组使得数据处理变得非常灵活,你可以根据需要创建、更新和访问它们来实现复杂的文本处理任务。

目录
相关文章
|
6月前
|
Perl
在 `awk` 脚本中初始化变量
在 `awk` 脚本中初始化变量
68 2
|
1月前
|
存储 Shell 索引
awk传参问题的详细解释
【10月更文挑战第16天】awk传参问题的详细解释
25 3
数组的相关用法
数组的相关用法
43 0
|
分布式计算 索引
常见的数组基本用法(二)
常见的数组基本用法
93 0
|
Shell
shell:脚本数组list定义、长度获取、循环打印、数组切片、字符串转换
shell:脚本数组list定义、长度获取、循环打印、数组切片、字符串转换
2140 0
F#数组常见用法
F#数组是固定大小的、从0开始、可变的连续数据元素集合,这些元素属于同一类型。一般来说,数组以一维数组和二维数组比较常用。在F#中还有一种列表类型(也是同类型的元素),它和数组的定义比较类似,但是它是不可变的对象,即一旦列表定义好后,我们无法修改特定索引上的元素值,而只能读取。但F#数组却可以进行元素的读取和写入。
910 0
F#数组常见用法
|
Perl Linux 数据格式
下一篇
无影云桌面