資源描述:
《awk數(shù)組排序多種實現(xiàn)方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、[chengmo@localhost~]$awk'BEGIN{info="thisisatest";slen=split(info,tA,"");for(i=1;i<=slen;i++){printi,tA[i];}}'????1this2is3a4test?一、通過內(nèi)置函數(shù)(asort,asorti使用)awk3.1以上版本才支持?asort使用說明srcarrlen=asort[srcarr,dscarr]默認返回值是:原數(shù)組長度,傳入?yún)?shù)dscarr則將排序后數(shù)組賦值給dscarr.?[chengm
2、o@localhost~]$awk'BEGIN{a[100]=100;a[2]=224;a[3]=34;slen=asort(a,tA);for(i=1;i<=slen;i++){printi,tA[i];}}'13421003224?asort只對值進行了排序,因此丟掉原先鍵值。?2、asorti使用說明?[chengmo@localhost~]$awk'BEGIN{a["d"]=100;a["a"]=224;a["c"]=34;slen=asorti(a,tA);for(i=1;i<=slen;i++
3、){printi,tA[i],a[tA[i]];}}'1a2242c343d100?asorti對鍵值進行排序(字符串類型),將生成新的數(shù)組放入:tA中。?二、通過管道發(fā)送到sort排序?[chengmo@localhost~]$awk'BEGIN{a[100]=100;a[2]=224;a[3]=34;for(iina){printi,a[i]
4、"sort-r-n-k2";}}'2224100100334?通過管道,發(fā)送到外部程序“sort”排序,-r從大到小,-n按照數(shù)字排序,-k2以第2列排序。通過
5、將數(shù)據(jù)丟給第3方的sort命令,所有問題變得非常簡單。如果以key值排序–k2變成-k1即可。?[chengmo@localhost~]$awk'BEGIN{a[100]=100;a[2]=224;a[3]=34;for(iina){printi,a[i]
6、"sort-r-n-k1";}}'1001003342224?三、自定義排序函數(shù)?awk自定義函數(shù)結(jié)構(gòu):functionfunname(p1,p2,p3)?{???staction;???returnvalue;?}?以上是:awk自定義函數(shù)表示方式,
7、默認傳入?yún)?shù)都是以引用方式傳入,return值,只能是字符型或者數(shù)值型。不能返回數(shù)組類型。如果返回數(shù)組類型。需要通過形參方式傳入。再獲得。?awk返回數(shù)組類型?awk'functiontest(ary){?for(i=0;i<10;i++){?ary[i]=i;?}?returni;}BEGIN{?n=test(array);?for(i=0;i8、排序2按照字符串排序?#tarr排序返回的數(shù)組?#splitseq分割字符串數(shù)組中鍵與值之間分割字符串?#return數(shù)組長度?#實現(xiàn)思路,將原始數(shù)組a[‘a(chǎn)’]=100排序后變成a[1]=a分隔符100,然后按照下標遞歸顯示內(nèi)容。本排序使用冒泡方式進行。???functionsortArr(arr,key,datatype,tarr,splitseq){???if(key~/[^1-2]/)???{returntarr;}??for(kinarr)??{???tarr[++alen]=(k""split
9、seq""arr[k]);??}???for(m=1;m<=alen;m++)??{????for(n=1;n<=alen-m-1;n++)????{??????split(tarr[m],tm,splitseq);??????split(tarr[n+1],tn,splitseq);?????????tnum=tarr[m];??????if(datatype==1)??????{????????if(tm[key]+010、r[n+1];???????????tarr[n+1]=tnum;????????}??????}??????else??????{????????if((tm[key]"")<(tn[key]""))????????{???????????tarr[m]=tarr[n+1];???????????tarr[n+1]=tnum;????????}??????}????}??}??returnalen;}???完整代碼如下:?[