江岸区网站公司,北京建网站的公司哪个比较好,网站中的冒号,辽宁建设工程信息网络用awk进行文本处理#xff0c;少不了就是它的数组处理。那么awk数组有那些特点#xff0c;一般常见运算又会怎么样呢。我们先看下以下的一些介绍#xff0c;结合样例我们会解说下它的不同之处。在 awk 中数组叫做关联数组(associative arrays)#xff0c;由于下标记能够是数…用awk进行文本处理少不了就是它的数组处理。那么awk数组有那些特点一般常见运算又会怎么样呢。我们先看下以下的一些介绍结合样例我们会解说下它的不同之处。在 awk 中数组叫做关联数组(associative arrays)由于下标记能够是数也能够是串。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” 。 二、数组相关函数 [chengmolocalhost ~]$ awk --versionGNU Awk 3.1.5 使用版本号是3.1以上不同版本号以下函数不一定同样 得到数组长度length方法使用 [chengmolocalhost ~]$ awk BEGIN{infoit is a test;lenssplit(info,tA, );print length(tA),lens;}4 4 length返回字符串以及数组长度split进行切割字符串为数组也会返回切割得到数组长度。 (asort使用: [chengmolocalhost ~]$ awk BEGIN{infoit is a test;split(info,tA, );print asort(tA);}4 asort对数组进行排序返回数组长度。 输出数组内容(无序有序输出 [chengmolocalhost ~]$ awk BEGIN{infoit is a test;split(info,tA, );for(k in tA){print k,tA[k];}}4 test1 it2 is3 a for…in 输出由于数组是关联数组默认是无序的。所以通过for…in 得到是无序的数组。假设须要得到有序数组须要通过下标获得。 [chengmolocalhost ~]$ awk BEGIN{infoit is a test;tlensplit(info,tA, );for(k1;ktlen;k){print k,tA[k];}} 1 it2 is3 a4 test 注意数组下标是从1開始与c数组不一样。 推断键值存在以及删除键值 一个错误的推断方法 [chengmolocalhost ~]$ awk BEGIN{tB[a]a1;tB[b]b1;if(tB[c]!1){print no found;};for(k in tB){print k,tB[k];}} no founda a1b b1c 以上出现奇怪问题tB[“c”]未定义可是循环时候发现已经存在该键值它的值为空这里须要注意awk数组是关联数组仅仅要通过数组引用它的key就会自己主动创建改序列. 正确推断方法 [chengmolocalhost ~]$ awk BEGIN{tB[a]a1;tB[b]b1;if( c in tB){print ok;};for(k in tB){print k,tB[k];}} a a1b b1 if(key in array) 通过这个方法推断数组中是否包括”key”键值。 删除键值 [chengmolocalhost ~]$ awk BEGIN{tB[a]a1;tB[b]b1;delete tB[a];for(k in tB){print k,tB[k];}} b b1 delete array[key]能够删除相应数组key的序列值。 三、二维数组使用(多维数组使用 awk的多维数组在本质上是一维数组更确切一点awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的訪问方式。例 如array[2,4] 1这种訪问是同意的。awk使用一个特殊的字符串SUBSEP (\034)作为切割字段在上面的样例中关联数组array存储的键值实际上是2\0344。 相似一维数组的成员測试多维数组能够使用 if ( (i,j) in array)这种语法可是下标必须放置在圆括号里。相似一维数组的循环訪问多维数组使用 for ( item in array )这种语法遍历数组。与一维数组不同的是多维数组必须使用split()函数来訪问单独的下标分量。split ( item, subscr, SUBSEP) [chengmolocalhost ~]$ awk BEGIN{ for(i1;i9;i){ for(j1;j9;j) {tarr[i,j]i*j;print i,*,j,,tarr[i,j]; }}}1 * 1 11 * 2 21 * 3 31 * 4 41 * 5 51 * 6 6 …… 能够通过array[k,k2]引用获得数组内容. 方法二 [chengmolocalhost ~]$ awk BEGIN{for(i1;i9;i){ for(j1;j9;j) {tarr[i,j]i*j; }}for(m in tarr) {split(m,tarr2,SUBSEP);print tarr2[1],*,tarr2[2],,tarr[m];}} 以上是awk对数组的处理相关希望对大家实用转载于:https://www.cnblogs.com/mfryf/p/3640204.html