awk でのループの使用

awk でのループの使用

同じコマンドを複数回実行するさまざまな種類のループについて学習しましょう。

awk スクリプトには、BEGIN 関数と END 関数 (どちらもオプション)、および毎回実行されるようにユーザーが記述した関数という 3 つの主要部分があります。ある意味では、awk の本体はループです。関数内のコマンドはレコードごとに 1 回実行されるためです。ただし、レコードに対して複数のコマンドを実行したい場合には、ループを使用する必要があります。

ループには多くの種類があり、それぞれ異なるシナリオに適しています。

whileループ

while ループは式をテストし、式が true の場合にコマンドを実行します。式が false になると、ループは中断されます。

#!/bin/awk -f
始める {
    # 1から10までループする
  私=1;
  (i <= 10) の間 {
    i を印刷します。「2 乗は "、i*i;
    i = i+1;
  }
出口;
}

この単純な例では、awk は変数 i に格納された整数値の 2 乗を出力します。 while (i <= 10) ステートメントは、i の値が 10 以下の間のみループを実行するように awk に指示します。ループが最後に実行された後(i の値が 10)、ループは終了します。

do-while ループ

do-while ループは、キーワード do に続くコマンドを実行します。各反復の最後にテスト式がチェックされ、ループを終了するかどうかが決定されます。コマンドは、テスト式が true を返す間(つまり、ループを終了する条件にまだ達していない間)のみ繰り返し実行されます。テスト式が false を返す場合、ループを終了する条件に達したため、ループは終了します。

#!/usr/bin/awk -f
始める {
    私=2;
    する {
        i を印刷します。「2 乗は "、i*i;
        私 = 私 + 1
    }
    一方 (i < 10)
出口;
}

forループ

awk には 2 種類の for ループがあります。

for ループは変数を初期化し、テスト式をチェックし、変数を増分し、式が true と評価される限りループを続行します。

#!/bin/awk -f
始める {
  (i=1; i <= 10; i++) の場合 {
    i を印刷します。「2 乗は "、i*i;
  }
出口;
}

別の for ループは、連続したインデックスを持つ配列変数を設定し、各インデックスに対して一連のコマンドを実行します。つまり、配列を使用して各コマンドの実行結果を「収集」します。

この例では、Unix コマンド uniq の簡略化されたバージョンを実装します。一連の文字列を配列 a のキーとして追加し、同じキーが再び出現したときにキー値を増分することで、文字列が出現する回数を調べることができます (uniq の --count オプションと同様)。配列のすべてのキーを印刷すると、文字列のすべての出現が取得されます。

デモ ファイル colours.txt (前の記事のファイル) を例に挙げます。

名前 色 量
アップルレッド4
バナナイエロー6
ラズベリーレッド 99
ストロベリーレッド3
グレープパープル10
アップルグリーン8
プラムパープル2
キウイブラウン4
ポテトブラウン9
パイナップルイエロー5

以下は、uniq -c の単純な awk バージョンです。

#!/usr/bin/awk -f
NR != 1 {
  a[$2]++
}
終わり {
  for (キー入力) {
        [キー]を印刷する " " キー
  }
}

サンプル データ ファイルの 3 番目の列は、最初の列にリストされているエントリの数です。配列と for ループを使用して、3 番目の列のエントリを色ごとにカウントできます。

#!/usr/bin/awk -f
始める {
  FS="";
  OFS="\t";
  print("color\tsum");
}
NR != 1 {
  [$2]+=$3;
}
終わり {
  (b が a の場合) {
    b, a[b] を印刷する
  }
}

ファイルを処理する前に、BEFORE 関数 (1 回だけ実行される) で列ヘッダーを印刷する必要があることもわかります。

サイクル

ループはあらゆるプログラミング言語の重要な部分であり、awk も例外ではありません。ループを使用すると、awk スクリプトの実行方法、カウントする情報、データの処理方法を制御できます。次の記事では、switch、continue、next ステートメントについて説明します。

ps: awk-for ループの簡単な使い方

文章:

[root@VM_0_84_centos ~]# cat sshd.txt
1 2 3
4 5 6
7 8 9

上記のテキストを印刷するためにループします

forループの固定形式 i=1 は i の初期変数を設定します i<=NF i 変数は NF 変数の値以下です (行あたりのフィールド数) i++ は i が +1 増加することを意味します。

[root@VM_0_84_centos ~]# cat sshd.txt |awk '{for(i=1;i<=NF;i++){print $i}}'
1
2
3
4
5
6
7
8
9

要約する

上記は、awk でのループの使用についての紹介です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • シェルスクリプトでのawkコマンドの使用
  • awk正規表現と組み込み関数の使用方法の詳細な例
  • シェル正規表現: grep、sed、awk の実践ノート
  • Linux の awk における split 関数の使用法の概要
  • ファイル内でキーワードが出現する回数をカウントするawkコマンド
  • sed または awk を使用してファイルの最後の行を処理する方法
  • Awk 間隔値の例
  • Awk 入門と学習ノート集

<<:  Vue エクスポート Excel 機能の全プロセス記録

>>:  win10 での mysql 8.0.16 winx64 インストールの最新グラフィック チュートリアル

推薦する

Dockerはプロセス操作を管理するためにSupervisorを使用する

Docker コンテナは、起動時に、たとえば ssh または apache デーモン サービスなどの...

Docker に共通コンポーネント (mysql、redis) をインストールする方法

Dockerはmysqlをインストールします docker search mysql 検索 dock...

JS にこれがあるのはなぜですか?

目次1. 需要2. 解決策3. 最初の改善4.砂糖を加える5. 理解不能6. 問題点7. オブジェク...

Zabbix はどのようにして ssh 経由でネットワーク デバイス データを監視および取得するのでしょうか?

シナリオシミュレーション:ある会社の運用保守担当者は、以前購入した一連のネットワーク機器の光ポートの...

VScode リモート SSH リモート編集とデバッグコード

Visual Studio Code の最新の Insider バージョンには、コードのリモート デ...

Tomcat が localhost に通常アクセスすると 404 を報告する問題の解決方法

今日、プロジェクトのホームページにアクセスするために Tomcat を設定していたところ、404 エ...

Vueログイン機能の実装

目次前面に書かれたログインの概要ログインビジネスプロセスログインサービスの関連技術ポイントログイント...

MySQL インデックスのカーディナリティの概念と使用例

この記事では、例を使用して、MySQL インデックス カーディナリティの概念と使用方法を説明します。...

MySQL 高可用性クラスタの展開とフェイルオーバーの実装

目次1. 内閣府1. コンセプト2. MHAの構成3. MHAの特徴2. MySQL+MHAをビルド...

Docker を使用して MySQL および Redis サービスをデプロイする方法

目次Dockerを使用してMySQLサービスをデプロイする方法DockerでRedisサービスをデプ...

Ansibleを使用してTomcatをバッチでデプロイする方法

1.1 ディレクトリ構造の構築この操作は、nginx+mysql+tomcat+dbのディレクトリ構...

位置のいくつかの巧妙な応用の詳細な説明:sticky スティッキーポジショニング

背景: position:sticky はスティッキー配置とも呼ばれます。スティッキー配置の要素は、...

IE、Firefox、Chromeブラウザではスペースの表示が異なります

&nbsp;&nbsp;IE、Firefox、Chrome ブラウザでの表示効果は、...

CSSフィルターにはどんな魔法の用途があるか

背景基本概念CSS filterプロパティは、ぼかしや色の変化などのグラフィック効果を要素に適用して...

vue3.2 で追加された defineCustomElement の基本原理の詳細な説明

目次Webコンポーネントカスタム要素概要HTMLTemplateElement コンテンツ テンプレ...