怎么在linux中对awk数组进行排序

2022年 10月 18日 发表评论
免费、便宜/高性价比 服务器汇总(已更新):点击这里了解

如何在linux中排序awk数组?很多新手对此不是很清楚。为了帮助您解决这个问题,本站将在下面向您详细解释。有这方面需求的人可以借鉴一下,希望你能有所收获。

代码如下:

[程默@localhost ~]$ awk 'BEGIN{info='这是测试';拆分(信息,Ta ' ');for(k in tA){print k,Ta[k];}}'

4测试

1这个

2是

3 a

如果需要按顺序输出,则通过键值定位输出。

代码如下:

[程默@localhost ~]$ awk 'BEGIN{info='这是测试';slen=split(info,tA,' ');for(I=1;i=sleni ){print i,Ta[I];}}'

1这个

2是

3 a

4测试

一、通过内置函数(asort,asorti使用) awk 3.1以上版本才支持

1.asort说明

srcarrlen=a art[srcarr,dscarr]默认返回值是原始数组长度,传入的参数dscarr将排序后的数组赋给dscarr。

代码如下:

[程默@localhost ~]$ awk 'BEGIN{

a[100]=100;

a[2]=224;

a[3]=34;

slen=asort(a,Ta);

for(I=1;i=slenI)

{print i,Ta[I];}

}'

1 34

2 100

3 224

Asort只对值进行排序,因此它会丢失原始键值。

2.使用asorti的说明

代码如下:

[程默@localhost ~]$ awk 'BEGIN{

a[' d ']=100;

a[' a ']=224;

a[' c ']=34;

slen=asorti(a,Ta);

for(I=1;i=slenI)

{print i,tA[i],a[Ta[I]];}

}'

1 a 224

2c 34

3 d 100

Asorti对键值(字符串类型)进行排序,并将生成的新数组放入:tA。

二、通过管道发送到sort排序

代码如下:

[程默@localhost ~]$awk 'BEGIN{

a[100]=100;

a[2]=224;

a[3]=34;

for(i in a)

{print i,a[I]| ' sort-r-n-k2 ';}

}'

2 224

100 100

3 34

通过管道发送给外部程序排序,-r从小到大,-n按数字排序,-k2按第二列排序。通过将数据扔给第三方的排序命令,所有的问题都变得非常简单。如果ndash按键值排序;K2变成-k1。

代码如下:

[程默@localhost ~]$ awk 'BEGIN{

a[100]=100;

a[2]=224;

a[3]=34;

for(i in a)

{print i,a[I]| ' sort-r-n-k1 ';}

}'

100 100

3 34

2 224

三、自定义排序函数

Awk自定义函数结构:

代码如下:

函数funname(p1,p2,p3)

{

堆叠;

返回值;

}/p

p以上是:awk自定义函数表示,默认参数都是引用传入的,返回值只能是字符型或者数字型。无法返回数组类型。如果返回数组类型。它需要作为形式参数传入。再拿一次。/p

Pawk返回数组类型/p

pawk ' function test(ary){ for(I=0;i10I){ ary[I]=I;}返回I;

}BEGIN{ n=test(array); for(i=0;i<n;i++){ print array[i]; }}'

排序函数

代码如下:

#arr 传入一维数组 </p> <p>#key 排序类型 1是按照值排序 2按照键值 </p> <p>#datatype 比较类型 1按照数字排序 2按照字符串排序 </p> <p>#tarr 排序返回的数组 </p> <p>#splitseq 分割字符串 数组中键与值之间分割字符串 </p> <p>#return 数组长度 </p> <p>#实现思路,将原始数组a[&lsquo;a&rsquo;]=100 排序后变成 a[1]=a分隔符100 ,然后按照下标递归显示内容。 本排序使用冒泡方式进行。 </p> <p> </p> <p>function sortArr(arr,key,datatype,tarr,splitseq){ </p> <p> if(key ~ /[^1-2]/) {return tarr;} for(k in arr) { tarr[++alen]=(k""splitseq""arr[k]); } </p> <p> 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); </p> <p> tnum=tarr[m]; if(datatype==1) { if(tm[key]+0<tn[key]+0) { tarr[m]=tarr[n+1]; tarr[n+1]=tnum; } } else { if((tm[key]"") < (tn[key]"")) { tarr[m]=tarr[n+1]; tarr[n+1]=tnum; } } } } return alen;}

完整代码如下:

代码如下:

[chengmo@centos5 ~]$ awk 'BEGIN{a["a"]=100;a["b"]=110;a["c"]=10;splitseq="%%";alen=sortArr(a,2,1,tarr,splitseq);for(m=1;m<=alen;m++){ split(tarr[m],ta,splitseq); print m,ta[1],ta[2];}}function sortArr(arr,key,datatype,tarr,splitseq){ </p> <p> if(key ~ /[^1-2]/) {return tarr;} for(k in arr) { tarr[++alen]=(k""splitseq""arr[k]); } </p> <p> 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); </p> <p> tnum=tarr[m]; if(datatype==1) { if(tm[key]+0<tn[key]+0) { tarr[m]=tarr[n+1]; tarr[n+1]=tnum; } } else { if((tm[key]"") < (tn[key]"")) { tarr[m]=tarr[n+1]; tarr[n+1]=tnum; } } } } return alen;}' </p> <p>1 b 1102 a 1003 c 10

<p

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: