• 온라인 도구
  • - 계산기
    • 문자 수
  • - 다운로드
    • TikTok 다운로드
    • DouYin 다운로드
  • - 웹 도구
    • BASE64
    • Base64→이미지
    • 이미지→Base64
    • URL 인코딩
    • JavaScript
    • 타임스탬프
    • 유니코드 변환기
    • JSON 형식
    • 확장자 수정
    • 목록 만들기
    • CSS 최적화
  • - 암호화 도구
    • MD5 암호화
    • 랜덤 생성기
  • - 이미지 도구
    • 이미지 압축
    • QR 코드 생성기
    • QR 코드 리더
    • 배경 화면 미리보기
    • 이미지 EXIF
  • - 정보 시트
    • 혈액형 유전
    • 의류 사이즈
    • app.tool_clock
  • [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 다운로드 DouYin 다운로드 BASE64 Base64→이미지 이미지→Base64 URL 인코딩 JavaScript 타임스탬프 유니코드 변환기 JSON 형식 확장자 수정 목록 만들기 CSS 최적화 MD5 암호화 랜덤 생성기 이미지 압축 QR 코드 생성기 QR 코드 리더 배경 화면 미리보기 이미지 EXIF 혈액형 유전 의류 사이즈 app.tool_clock
  • 英国を代表する作曲家ブリテンが世界平和を願って作った『戦争レクイエム』【クラシック今日は何の日?】
    2024-05-29

    <司書のコレ絶対読んで>「王さまと九人のきょうだい」君島久子訳、赤羽末吉絵
    2024-05-29

    美術館の裏側を伝える展覧会「鎌倉別館40周年記念 てあて・まもり・のこす 神奈川県立近代美術館の保存修復」レポート
    2024-05-29

    住所要件の指摘受け自主的に転入 東京・足立区の20代選管委員・古野香織さん
    2024-05-30

    ブームなぜ起きた? 東京国立近代美術館で「ハニワと土偶の近代」展
    2024-05-30

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

    作曲家ビゼーの窮地を救った傑作オペラ『真珠採り』の聴きどころは?【クラシック今日は何の日?】
    2024-05-31

    富士山麓のダイナミックな食材を味わう“奥・山梨”のガストロノミー〈Restaurant SAI 燊〉。
    2024-06-01

    ニコライ・バーグマンが手がける北欧のジュエリーブランド〈フローラダニカ〉旗艦店が南青山にオープン。
    2024-06-03

    写真家たちは強大な権力の抑圧にどう抗ったのか。バルト三国の写真家に焦点を当てる展覧会をレポート
    2024-06-04

    イタリア・ヴェローナの歴史あるレストランをパトリシア・ウルキオラが再解釈。
    2024-06-03

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

    特別展 「工芸的美しさの行方―うつわ・包み・装飾」が東京と京都で開催。日本の美術工芸を世界へ 
    2024-06-04

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

    GROUP「島をつくる | Planning Another Island」(マイナビアートスクエア)開幕レポート。高層ビルのなかで建築をコンポストする
    2024-06-05

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

    週末見たい展覧会5選。今週はTRIO展、吉田克朗展、建築の構造デザインに焦点を当てた展覧会など。【2024年6月第2週】
    2024-06-05

    なぜ、いま「先住民の現代アート」なのか? 『美術手帖』2024年7月号は、「先住民の現代アート」特集
    2024-06-06

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

    美術家藤井光さん個展「終戦の日/WAR IS OVER」 希望か絶望か…大分・佐伯の地下弾薬庫跡にこだまする泣き声
    2024-06-07

    ©  Dopu Box
    💛