awk 数组

Arrays

Arrays are subscripted with an expression between square brackets ([ and ]).

  If the expression is an expression list (expr, expr ...)  then the array subscript is a string consisting of  the concatenation of the (string) value of each expression, separated by the value of the SUBSEP variable.

  This facility is used to simulate multiply dimensioned arrays.

  For example:

i = "A"; j = "B"; k = "C"

x[i, j, k] = "hello, world\n"

assigns the string "hello, world\n" to the element of the array x which is indexed by the string "A\034B\034C".  All arrays in AWK are associative, i.e. indexed by string values.

The special operator in may be used to test if an array has an index consisting of a particular value:

if (val in array)

print array[val]

If the array has multiple subscripts, use (i, j) in array.

The in construct may also be used in a for loop to iterate over all the elements of an array.

An element may be deleted from an array using the delete statement.  The delete statement may also be used to delete the entire contents of an array, just by specifying the array name without a subscript.

gawk supports true multidimensional arrays. It does not require that such arrays be ``rectangular‘‘ as in C or C++.  For example:

a[1] = 5

a[2][1] = 6

a[2][2] = 7

数组是通过一个表达式进行索引,而这个表达式放在一对方括号中。如果该表达式是一个表达式列表(expr,expr ...),那么这个数组的每一个索引是 每一个expr通过SUBSEP连接起来的整个expression.因为awk只支持一维数组,那么如果数组索引是一个表达式,那么就是一维数组;如果数组索引是 表达式列表,那么就可以模拟多维数组。通常C语言中数组的索引是数字,所以从C的角度去考虑就会不好理解。但是如果从 key-value 数组的形式去考虑,例如 php,就很好理解awk的数组了。

示例:

一维数组:

[email protected]:~/test/shell$ awk ‘BEGIN{for (i=1;i<=2;i++) {array[i]=i*10};for (x in array) {print x,array[x]}}‘

二维数组:

[email protected]:~/test/shell$ awk ‘BEGIN{ for (i=1;i<=2;i++) {for (j=1;j<=3;j++) {array[i,j]=i*j*10}};  for (x in array) {print x,array[x]}}‘

如果自己设置SUBSEP变量,那么可以看到索引表达式是由 SUBSEP 连接的。

原文地址:https://www.cnblogs.com/black-mamba/p/8881843.html

时间: 2024-10-06 04:08:31

awk 数组的相关文章

初学awk数组会遇到的几个常见问题

原题目: 处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题) 答案的详细讲解请参考: http://lidao.blog.51cto.com/3388056/1912219 文件内容: http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html h

awk入门及awk数组相关实战

知识点: l 记录与字段 l 模式匹配:模式与动作 l 基本的awk执行过程 l awk常用内置变量(预定义变量) l awk数组(工作常用) l awk语法:循环.条件 l awk常用函数 l 向awk传递参数 l awk引用shell变量 l awk小程序及调试思路 [[email protected] ~]# awk --version|head -1 GNU Awk 3.1.7 第1章 记录和字段 record记录==行, field字段相当于列,字段==列. awk对每个要处理的输入数

shell数组和awk数组

awk终于能入门了,所以整理了该文章,内容大多来自网上. 一.bash支持一维数组(不支持多维数组),没有限定数组的大小.在shell中,用括号来表示数组,数组元素用空格符号分割开.类似于C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0 1. 定义数组 数组名array,元素a b c [[email protected]~]# array=(a b c) 2.获取所有元素 [[email protected]~]# echo ${a

awk数组用法

两个文件,从文件b首列查找出等于文件a的行并输出[[email protected] ~]# cat a1367[[email protected] ~]# cat b1 2 32 3 43 4 54 5 65 6 76 7 87 8 9 shell脚本[[email protected] ~]# cat jieguo #!/bin/bashy=`sed -n 'p' a |wc -l`  #a 行数x=`sed -n 'p' b |wc -l`  #b行数for((i=1;i<=$y;i++)

awk 数组理解与应用

awk 数组无须实现定义 ckl[abc]=6 ckl[xyz]=9 abc 为下标名称 9 则为下标对应的值 BEGIN 为模式前匹配,即为匹配之前操作 END 为模式匹配后,即为匹配后操作 如常用的统计TCP状态的awk命令 # netstat -ant | awk '/^tcp/{STA[$NF]++}END{for ( k in STA) {print k,STA[k]}}' TIME_WAIT 4 CLOSE_WAIT 19 FIN_WAIT2 1 ESTABLISHED 135 LA

获取连接状态数的awk数组命令

awk -n|more [email protected]780:~/Icpp/server$ netstat -n|more 激活Internet连接 (w/o 服务器) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 28 0 10.8.0.171:43313 91.189.92.10:443 CLOSE_WAIT tcp 0 0 10.8.0.171:37374 116.213.120.232:80 ESTABLISH

awk数组计数和去重---统计域名访问次数

1.awk数组 假设我们有一个酒店 酒店<===>Green 酒店里面有几个房间515,516,517,519这几个房间 酒店515房间<===>GreenHotel[515] 酒店516房间<===>GreenHotel[516] 酒店517房间<===>GreenHotel[517] 酒店519房间<===>GreenHotel[519] 酒店房间里面入住客人 酒店110房间住着xiaowei<===>greenhotel[515

awk数组

1.使用awk数组统计出以下域名中相同域名出现的次数 [[email protected]]# cat url.txt  http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html http://www.etiantian.org/3.html http://post.etia

(转)awk数组详解及企业实战案例

awk数组详解及企业实战案例 原文:http://www.cnblogs.com/hackerer/p/5365967.html#_label03.打印数组:1. [[email protected] test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";for(key in array) print key,array[key]}'2. 1 zhurui3. 2 zhuzhu4. [[email protect

awk数组实战

1.数组求和 题目1: 已知文件内容如下: [[email protected] ~]# cat awk1.txt 123456789 [[email protected] ~]# awk '{array[1]+=$1}END{for(key in array)print array[key]}' awk1.txt     45 题目2: 已知文件内容如下: [[email protected] ~]# cat awk2.txt zhangsan     80lisi         81.5w