导航:首页 > 操作系统 > linuxsortk

linuxsortk

发布时间:2025-02-24 13:38:37

linux:cut、sort都是针对列操作,有没有对行操作的命令

sort命令用于对文档内容进行排序处理,命令使用格式如下:
sort 选项 文件1 文件2 ......
sort命令的常用选项包括:
-t 指定分割文本的分隔符
-k 指定按照分割后文本内容的第几列排序
-r 结果降序排序
-n 把文本转换为数值再排序
使用sort命令的示例如下:
①sort -rn -k 2 f1:按照文档第二列的数值大小进行降序排序。-n表示按照数值大小比较排序,默认为升序,加上-r表示为降序,-k指定按照第几列排序。
②sort -rn -u -k 2 f1:-u表示去除重复行。
③sort -t ":" -rn -k 2 f1:-t指定列之间的分隔符为“:”,不写则默认空格作为分隔符。
cut命令用于显示按照分隔符截取分指定列的文本内容,命令使用格式如下:
cut 选项 文件1 文件2 ......
cut命令的常用选项包括:
-d 指定文本分隔符
-f 指定显示分割后文本的第几列
cut -d " " -f 3 f1:截取文档中的第三列。-d指定分隔符为一个空格,-f指定显示第几列。但是,cut命令对分隔符连续较多的情况,审核较为死板,很难按照我们想要的效果实现截取,如有以下文件:
aaa 111 ccc
bbb 222 ccc
每行文字中各列间的空格数不同,“aaa”与“111”之间有一个空格,而“bbb”与“222”之间有两个空格,在使用cut命令时,如果设定分隔符为一个空格,希望截取用空格隔开的文字时,对于行“bbb 222”由于文字中存在二个空格,其中的第二个空格则被视为第二列,所以cut命令不会把“222”视为第二列而是第三列。因此,cut在截取数量不确定的空格隔开的文字时十分不便。所以一般在连续分隔符个数不统一时,更习惯使用awk命令。

㈡ linuxawk数组排序多种实现方法

复制代码代码如下:
[chengmo@localhost ~]$ awk 'BEGIN{info = "this is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 this
2 is
3 a

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

复制代码代码如下:
[chengmo@localhost ~]$ awk 'BEGIN{info = "this is 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 224

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++)
{print i,tA[i],a[tA[i]];}
}'
1 a 224
2 c 34
3 d 100

asorti对键值 进行排序(字符串类型),将生成新的数组放入: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;
}

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

awk返回数组类型

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 传入一维数组

#key 排序类型 1是按照值排序 2按照键值

#datatype 比较类型 1按照数字排序 2按照字符串排序

#tarr 排序返回的数组

#splitseq 分割字符串 数组中键与值之间分割字符串

#return 数组长度

#实现思路,将原始数组a[‘a’]=100 排序后变成 a[1]=a分隔符100 ,然后按照下标递归显示内容。 本排序使用冒泡方式进行。

function sortArr(arr,key,datatype,tarr,splitseq)
{

if(key ~ /[^1-2]/)
{return tarr;}
for(k in arr)
{
tarr[++alen]=(k""splitseq""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]+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)
{

if(key ~ /[^1-2]/)
{return tarr;}
for(k in arr)
{
tarr[++alen]=(k""splitseq""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]+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;
}
'

1 b 110
2 a 100
3 c 10

以上是awk数组排序一些方法。对于少量数据排序,就性能而言,使用自定义函数性能要高,不需要另外再开启进程。对于大量数据,排序第2种方法还是很不错的。


阅读全文

与linuxsortk相关的资料

热点内容
如何利用肉鸡搭建ftp服务器 浏览:444
用户名已加密怎么办 浏览:140
js怎么样上传到文件到服务器地址 浏览:577
省钱吖app里面的钱怎么套出来 浏览:588
ove转pdf 浏览:305
八字油槽编程 浏览:239
遥望app怎么重新注册 浏览:402
石墨文档导出到手机的哪个文件夹 浏览:494
scratch编程校本教材 浏览:93
如何把多个文件夹一起解压 浏览:908
儿童编程免费教学20节课 浏览:118
java判断时间格式 浏览:906
分析程序员招聘分析程序员 浏览:119
soul苹果会员为什么比安卓贵 浏览:860
安卓ncm怎么转换成mp3 浏览:714
山东百兆服务器云服务器 浏览:879
安卓主题怎么自定义 浏览:324
抓包如何知道是不是加密接口 浏览:248
prebuild增加编译文件 浏览:965
遗憾值算法反复逸代 浏览:806