如何在Linux中使用awk文本处理工具

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

今天本站向你展示了如何在Linux中使用awk文本处理工具。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

代码如下:

[程默@ localhost ~]$ awk lsquo;BEGIN{info="这是一个测试";拆分(info,tA,");for(k in tA){print k,Ta[k];} }的。

4测试

1这个

2是

3 a

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

代码如下:

[程默@ localhost ~]$ awk lsquo;BEGIN{info="这是一个测试";slen=split(info,tA," ");for(I=1;I “=slen;i ){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 lsquo;BEGIN{

a[100]=100;

a[2]=224;

a[3]=34;

slen=asort(a,Ta);

for(I=1;I “=slen;I)

{print i,Ta[I];}

} amp;amp;nbsp。

1 34

2 100

3 224

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

2.使用asorti的说明

代码如下:

[程默@ localhost ~]$ awk lsquo;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]];}

} amp;amp;nbsp。

1 a 224

2c 34

3 d 100

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

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

代码如下:

[程默@ localhost ~]$ awk lsquo;BEGIN{

a[100]=100;

a[2]=224;

a[3]=34;

for(i in a)

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

} amp;amp;nbsp。

2 224

100 100

3 34

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

代码如下:

[程默@ localhost ~]$ awk lsquo;BEGIN{

a[100]=100;

a[2]=224;

a[3]=34;

for(i in a)

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

} amp;amp;nbsp。

100 100

3 34

2 224

  三、自定义排序函数

Awk自定义函数结构:

代码如下:

函数funname(p1,p2,p3)

{

堆叠;

返回值;

} 《/p》 《p》以上是:awk自定义函数表示,默认参数都是引用传入的,返回值只能是字符型或者数字型。无法返回数组类型。如果返回数组类型。它需要作为形式参数传入。再拿一次。《/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文本处理工具,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

小咸鱼

发表评论

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