linux 数组 字符串排序,排序Linux如何使用awk文本处理工具进行数组排序

Li n ux如何使用awk文本处理工具进行数组排序l inux论坛http://www. l inuxcool. com/

Linux系统操作中 awk是款文本处理工具提供多种功能那么如何使用awk进行数组排序呢其实awk数组排序的方法有很多种下面小编就给大家详细介绍下Linux中如何使用awk进行数组排序。

代码如下

chengmo@localhost ~ $ awk "BEGIN{info = "thisis a test";split info tA " " ;for k in tA {printk tA k ; } }"

4 test

1 this

2 is

3 a

如果需要按照顺序输出通过键值定位方式输出。

代码如下

chengmo@localhost ~ $ awk "BEGIN{info = "thisis a test";slen=split info tA " " ;for i=1; i

《=slen; i++ {print i tA i ; } }"

1 this

2 is

3 a

4 test

一、通过内置函数asort asorti使用 awk 3. 1以上版本才支持

1、 asort使用说明

srcarrlen=asort srcarr dscarr 默认返回值是原数组长度传入参数dscarr则将排序后数组赋值给dscarr.

代码如下

chengmo@localhost ~ $ awk "BEGIN{a 100 =100;a 2 =224;a 3 =34;slen=asort a tA ;for i=1 ; i 《=slen;i++

{print i tA i ; }

}"

1 34

2 100

3 224asort只对值进行了排序 因此丢掉原先键值。

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++

{print i tA i  a tA i  ; }

}"

1 a 224

2 c 34

3 d 100asorti对键值进行排序字符串类型 将生成新的数组放入 tA中。

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

代码如下

chengmo@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

通过管道发送到外部程序"sort"排序 -r从大到小 -n按照数字排序 -k2 以第2列排序。通过将数据丢给第3方的sort命令所有问题变得非常简单。如果以key值排序-k2变成-k1即可。

代码如下

chengmo@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自定义函数结构

代码如下function funname p1 p2 p3

{

staction;return value;

} 《/p》 《p》以上是 awk自定义函数表示方式默认传入参数都是以引用方式传入 return值只能是字符型或者数值型。 不能返回数组类型。 如果返回数组类型。需要通过形参方式传入。再获得。 《/p》 《p》 awk返回数组类型

《/p》 《p》 awk "function test ary { for i=0; i

《10; i++ { ary i =i; } return 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 "a" =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 110

2 a 100

3 c 10

上面就是Linux使用awk进行数组排序的方法介绍了本文一共介绍了3种方法每种方法都能够实现awk的数组排序可选择任一方法实现。l inux论坛http://www. l inuxcool. com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值