
发件人:
使用awk进行文本处理,它的数组处理是必不可少的. 那么awk数组的特征是什么?普通操作又如何呢?让我们看一下下面的一些介绍,我们将通过示例来解释差异. 数组在awk中称为关联数组,因为下一个标记可以是数字或字符串. awk中的数组不必事先声明,也不需要声明大小. 根据上下文,使用0或空字符串初始化数组元素. 例如:
首先,定义方法
1: 您可以将数值用于数组索引(下标)
Tarray[1]=“cheng mo” Tarray[2]=“800927”
2: 您可以将字符串用作数组索引(下标)
Tarray[“first”]=“cheng ” Tarray[“last”]=”mo” Tarray[“birth”]=”800927”
在使用中,print Tarray [1]将获得“ cheng mo”,print Tarray [2]和print [“ birth”]将获得“ 800927”.
第二个与数组相关的函数
[chengmo @ localhost〜] $ awk --version
GNU Awk 3.1.5
使用的版本是: 3.1以上,不同版本的以下功能可能不同
[chengmo @ localhost〜] $ awk'BEGIN {info =“这是一个测试”;镜头=分割(info,tA,“”);打印长度(tA),镜头;}'
4 4
length返回字符串和数组的长度. Split将字符串拆分为一个数组,并返回该数组的长度.
(由asort使用):
[chengmo @ localhost〜] $ awk'BEGIN {info =“这是一个测试”;分割(info,tA,“”);打印分类(tA);}'

4
asort对数组进行排序并返回数组的长度.
[chengmo @ localhost〜] $ awk'BEGIN {info =“这是一个测试”;分割(info,tA,“”); for(k in tA){print k,tA [k];}}'
4次测试
1个
2是
3 a
在输出中使用
for…,因为该数组是一个关联数组,所以默认值为无序. 因此,通过for ... in是无序数组. 如果需要获取有序数组,则需要按下标获取.
[chengmo @ localhost〜] $ awk'BEGIN {info =“这是一个测试”; tlen =分割(info,tA,“”); for(k = 1; k <= tlen; k ++){print k,tA [k];}}'
1个
2是
3 a
4次测试
注意: 数组下标从1开始,与c数组不同.
错误的判断方法:
[chengmo @ localhost〜] $ awk'BEGIN {tB [“ a”] =“ a1”; tB [“ b”] =“ b1”; if(tB [“ c”]!=“ 1”){打印“未找到”;}; for(k in tB){print k,tB [k];}}'

未找到
a a1
b b1
c
上面有一个奇怪的问题,tB [“ c”]没有定义,但是当它循环时,发现键值已经存在,并且它的值是空的. 这里应该注意,awk数组是一个关联数组,只要由数组键引用它,它将自动创建一个更改序列.
正确的判断方法:
[chengmo @ localhost〜] $ awk'BEGIN {tB [“ a”] =“ a1”; tB [“ b”] =“ b1”;如果(tB中的“ c”){打印“确定”; }; for(k in tB){print k,tB [k];}}'
a a1
b b1
if(数组中的键)使用此方法确定数组是否包含“键”键值.
删除键值:
[chengmo @ localhost〜] $ awk'BEGIN {tB [“ a”] =“ a1”; tB [“ b”] =“ b1”;删除tB [“ a”]; for(k in tB){print k,tB [k];}}'
b b1
删除数组[key]可以被删除awk数组长度,它对应于数组键awk数组长度,序列值.
三,使用二维数组(使用多维数组)
awk的多维数组本质上是一维数组. 更准确地说,awk在存储中不支持多维数组. awk提供了一种逻辑上模拟二维数组的访问方法. 例如,允许访问数组[2,4] = 1. awk使用特殊字符串SUBSEP(\ 034)作为拆分字段. 在上面的示例中,存储在关联数组数组中的键值实际上是2 \ 0344.
类似于一维数组成员测试,多维数组可以使用if((i,j)in array)语法,但是下标必须放在括号中.

类似于一维数组的迭代访问,多维数组用于(数组中的项)遍历数组. 与一维数组不同,多维数组必须使用split()函数访问单个下标组件. 拆分(项目,subscr,SUBSEP)
[chengmo @ localhost〜] $ awk'BEGIN {
对于(i = 1; i <= 9; i ++)
{
对于(j = 1; j <= 9; j ++)
{
tarr [i,j] = i * j;
打印i,“ *”,j,“ =”,tarr [i,j];
}
}
}'
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6

......
可以通过引用数组[k,k2]获得数组的内容.
方法二:
[chengmo @ localhost〜] $ awk'BEGIN {
对于(i = 1; i <= 9; i ++)
{
对于(j = 1; j <= 9; j ++)
{
tarr [i,j] = i * j;
}
}
对于(单位: tar)
{
分割(m,tarr2,SUBSEP);
打印tarr2 [1],“ *”,tarr2 [2],“ =“,tarr [m];
}
}'
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-187441-1.html