awk数组排序多种实现方法.doc_第1页
awk数组排序多种实现方法.doc_第2页
awk数组排序多种实现方法.doc_第3页
awk数组排序多种实现方法.doc_第4页
awk数组排序多种实现方法.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

chengmolocalhost $ awk BEGINinfo = this is a test;slen=split(info,tA, );for(i=1;i=slen;i+)print i,tAi; 1 this2 is3 a4 test一、通过内置函数(asort,asorti使用) awk 3.1以上版本才支持asort使用说明srcarrlen=asortsrcarr,dscarr 默认返回值是:原数组长度,传入参数dscarr则将排序后数组赋值给dscarr.chengmolocalhost $ awk BEGINa100=100;a2=224;a3=34;slen=asort(a,tA);for(i=1;i=slen;i+)print i,tAi;1 342 1003 224asort只对值进行了排序,因此丢掉原先键值。2、asorti 使用说明chengmolocalhost $ awk BEGINad=100;aa=224;ac=34;slen=asorti(a,tA);for(i=1;i=slen;i+)print i,tAi,atAi;1 a 2242 c 343 d 100asorti对键值 进行排序(字符串类型),将生成新的数组放入:tA中。二、通过管道发送到sort排序chengmolocalhost $awk BEGINa100=100;a2=224;a3=34;for(i in a)print i,ai | sort -r -n -k2;2 224100 1003 34通过管道,发送到外部程序“sort”排序,-r 从大到小,-n 按照数字排序,-k2 以第2列排序。通过将数据丢给第3方的sort命令,所有问题变得非常简单。如果以key值排序 k2 变成 -k1即可。chengmolocalhost $ awk BEGINa100=100;a2=224;a3=34;for(i in a)print i,ai | sort -r -n -k1;100 1003 342 224三、自定义排序函数awk自定义函数结构:function funname(p1,p2,p3) staction; return value;以上是:awk自定义函数表示方式,默认传入参数都是以引用方式传入,return值,只能是字符型或者数值型。 不能返回数组类型。 如果返回数组类型。需要通过形参 方式传入。再获得。awk返回数组类型awk function test(ary)for(i=0;i10;i+) aryi=i;return i;BEGINn=test(array);for(i=0;in;i+) print arrayi;排序函数#arr 传入一维数组#key 排序类型 1是按照值排序 2按照键值#datatype 比较类型 1按照数字排序 2按照字符串排序#tarr 排序返回的数组#splitseq 分割字符串 数组中键与值之间分割字符串#return 数组长度#实现思路,将原始数组aa=100 排序后变成 a1=a分隔符100 ,然后按照下标递归显示内容。 本排序使用冒泡方式进行。function sortArr(arr,key,datatype,tarr,splitseq) if(key /1-2/) return tarr; for(k in arr) tarr+alen=(ksplitseqarrk); for(m=1;m=alen;m+) for(n=1;n=alen-m-1;n+) split(tarrm,tm,splitseq); split(tarrn+1,tn,splitseq); tnum=tarrm; if(datatype=1) if(tmkey+0tnkey+0) tarrm=tarrn+1; tarrn+1=tnum; else if(tmkey) (tnkey) tarrm=tarrn+1; tarrn+1=tnum; return alen;完整代码如下:chengmocentos5 $ awk BEGINaa=100;ab=110;ac=10;splitseq=%;alen=sortArr(a,2,1,tarr,splitseq);for(m=1;m=alen;m+) split(tarrm,ta,splitseq); print m,ta1,ta2;function sortArr(arr,key,datatype,tarr,splitseq) if(key /1-2/) return tarr; for(k in arr) tarr+alen=(ksplitseqarrk); for(m=1;m=alen;m+) for(n=1;n=alen-m-1;n+) split(tarrm,tm,splitseq); split(tarrn+1,tn,splitseq); tnum=tarrm; if(datatype=1) if(tmkey+0tnkey+0) tarrm=tarrn+1; tarrn+1=tnum; else if(tmkey) (tnkey) tarrm=tarrn+1; tarrn+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论