• 在线工具
  • - 计算器
    • 字符计数
  • - 下载
    • TikTok 下载
    • 抖音下载
  • - 网络工具
    • BASE64
    • Base64 转图片
    • 图片转 Base64
    • URL 编码
    • JavaScript
    • 时间戳
    • Unicode 转换器
    • JSON 格式化
    • 修改扩展名
    • 制作列表
    • CSS 优化器
  • - 加密工具
    • MD5 加密
    • 随机生成器
  • - 图像工具
    • 图像压缩
    • 二维码生成器
    • 二维码识别器
    • 壁纸预览
    • 图片 EXIF
  • - 信息表
    • 血型遗传
    • 服装尺码
  • [email protected]
DopuBox
  • English
  • Español
  • Français
  • 日本語
  • 한국어
  • 简体中文
  • 繁體中文
全部 ニュース Meta Code 文化・アート
Linuxはawkテキスト処理ツールを使用して配列をソートする方法
2021-12-10

Linuxシステムの操作ではawkはテキスト処理ツールであり、多くの機能を提供していますが、awkを使用して配列ソートを行うにはどうすればいいのでしょうか。実はawk配列のソート方法はいろいろありますが、Linuxでawkを使って配列をソートする方法について詳しく紹介します。

コードは次のとおりです。

  [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使用説明

src arrlen=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は数字でソートされ、-k 2は2列目でソートされます。サードパーティのsortコマンドにデータを捨てることで、すべての問題が非常に簡単になります。key値でソートすると–k 2が-k 1になります。

コードは次のとおりです。

  [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が1次元配列に転送する「/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の配列ソートを実現することができ,いずれかの方法で実現することができる.


ソース元URL:https://dopubox.com/article/p/4a0d83e733275809

其他工具
  • 字符计数 TikTok 下载 抖音下载 BASE64 Base64 转图片 图片转 Base64 URL 编码 JavaScript 时间戳 Unicode 转换器 JSON 格式化 修改扩展名 制作列表 CSS 优化器 MD5 加密 随机生成器 图像压缩 二维码生成器 二维码识别器 壁纸预览 图片 EXIF 血型遗传 服装尺码
  • かど番・藤井聡太、第4局始まる 将棋、叡王戦
    2024-05-30

    韓国HYBE傘下の代表続投 和解望む意向
    2024-05-31

    【6月1日~2日】週末必見の“アート&デザイン”まとめ!
    2024-06-01

    【大河ドラマ「光る君へ」本日第22話】紫式部と清少納言は「顔を合わせていなかった」?
    2024-06-01

    ポール・オースターの名言「けれどオニオンパイの味は…」【本と名言365】
    2024-06-02

    万博無料招待、大阪の学校7割が希望 「不参加」の選択肢ない調査手法に批判も
    2024-06-03

    テレ東が警察密着番組の担当者らを懲戒処分
    2024-06-03

    フジコ・ヘミングさん偲ぶ魂のピアノ旋律
    2024-06-03

    レイモンド・ローウィの名言「優れたインダストリアルデザインは、…」【本と名言365】
    2024-06-04

    第34回福岡アジア文化賞受賞者が決定。大賞は真鍋大度
    2024-06-04

    「CLAMP展」が国立新美術館で7月より開催。展示数は史上最多の約800点
    2024-06-04

    彫刻の森美術館で「舟越桂 森へ行く日」が開催へ
    2024-06-05

    ペース・ギャラリーが9月にグランドオープン。7月には特別内覧会を開催へ
    2024-06-04

    東京都写真美術館で「今森光彦 にっぽんの里山」が開催へ
    2024-06-04

    「犬派?猫派?」(山種美術館)開幕レポート。初公開から名作まで勢揃い
    2024-06-04

    「ART OSAKA 2024」が7月18日より開幕。近代建築と現代美術のコラボレーションにも注目
    2024-06-04

    性被害者支援の法人設立 スマイル社
    2024-06-04

    藤井、棋聖戦5連覇へ白星発進
    2024-06-06

    ブリン・バン・バン・ボンが1位 ビルボード、上半期人気曲
    2024-06-06

    向田邦子の名言「…これが私の料理のお稽古なのです。」【本と名言365】
    2024-06-07

    ©  Dopu Box
    💛