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 インストールの最新グラフィック チュートリアル

推薦する

Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法

導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...

Mysql は非集計列を選択できません

1. はじめに最近ブログをアップグレードし、記事ページの下部に前の記事と次の記事に直接ジャンプできる...

ミニプログラム開発ツールのソースコードからの基本実装の分析

目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...

Vueルーティング相対パスジャンプメソッド

目次Vueルーティング相対パスジャンプ1. 属性の追加2.router.resolveメソッドVue...

Linux コマンドで .sql ファイルをエクスポートおよびインポートする方法

この記事では、Linux コマンドを使用して .sql ファイルをエクスポートおよびインポートする方...

7つの基本的なXHTMLコーディングルールの概要

1. すべてのタグには対応する終了タグが必要です以前の HTML では、<p> や &l...

MySQLパーティションテーブルは月別に分類されています

目次テーブルを作成するデータベース ファイルを表示します。入れるクエリ消去補足:Mysqlは月テーブ...

Centos7 に Nginx 統合 Lua サンプル コードをインストール

序文私が使用しているパソコンはMacで、OSはmacOS Mojaveです。コンピュータに仮想マシン...

Docker、プレーヤー機能を備えたCMSオンデマンドシステムを構築

目次文章1. 機械を準備する2. Dockerをインストールする1. 依存パッケージをインストールす...

HTML タグのネスト規則の紹介

XHTML タグには、div、ul、li、dl、dt、dd、h1~h6、p、a、addressa、s...

JS変数ストレージのディープコピーとシャローコピーの詳しい説明

目次可変タイプとストレージスペーススタックメモリとヒープメモリ基本的なデータ型参照タイプグラフィック...

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

MySQL のロックに関する問題

ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...

MySQL自動シャットダウン問題への対処の実践記録

最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...

Vueは動的に生成されたコンポーネントをドラッグアンドドロップする要件を実装します

目次製品要件アイデア問題ライブラリ選択をドラッグコンポーネントを生成する方法コンポーネントを生成する...