[Transfer] awk数组操作

电脑杂谈  发布时间:2020-04-24 18:17:56  来源:网络整理

awk数组长度_awk数组下标_perl数组长度

发件人:

使用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);}'

awk数组下标_perl数组长度_awk数组长度

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];}}'

awk数组长度_perl数组长度_awk数组下标

未找到

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)语法,但是下标必须放在括号中.

perl数组长度_awk数组长度_awk数组下标

类似于一维数组的迭代访问,多维数组用于(数组中的项)遍历数组. 与一维数组不同,多维数组必须使用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

awk数组下标_awk数组长度_perl数组长度

......

可以通过引用数组[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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...