awkでのループループ_awkでループを使用する方法

11676 ワード

awkでのループループ
Awkスクリプトには、オプションのBEGINとEND関数、および各レコードで実行される記述関数の3つの主要な部分があります.ある程度awkスクリプトのボディはループです.関数のコマンドはレコードごとに実行されるためです.ただし、1つのレコードでコマンドを複数回実行したい場合があります.これを実現するには、ループを作成する必要があります.
いくつかのサイクルがあり、それぞれのサイクルには独特の用途があります.

Whileサイクル


whileはテスト条件をループし、コマンドを実行し、テストはtrueを返します.テストがfalseに戻ると、ループが中断されます.
#!/bin/awk -f

BEGIN {
        # Loop through 1 to 10

    i = 1 ;
    while ( i < = 10 ) {
        print i, " to the second power is " , i * i;
        i = i+ 1 ;
    }
exit ;
}
この簡単な例では、awk印刷変数iに含まれる任意の整数の二乗を印刷する.while(i<=10)のフレーズはawkがiの値が10以下の場合にのみループを実行することを示す.最終反復(iは10)の後、ループは終了する.

whileループをする


do whileループは、キーワードdoの後にコマンドを実行します.その後、テストを実行して、停止条件が満たされているかどうかを決定します.コマンドは、テストがtrue(終了条件を満たしていない)を返す場合にのみ繰り返します.テストに失敗すると、終了条件が満たされているため、ループが中断されます.
#!/usr/bin/awk -f
BEGIN {

        i = 2 ;
        do {
                print i, " to the second power is " , i * i;
                i = i + 1
        }
        while ( i < 10 )

exit ;
}

ループの場合


awkには2つのforサイクルがあります.
forループは変数を初期化し、テストを実行し、変数を一緒に増やし、trueとしてテストしたときにコマンドを実行します.
#!/bin/awk -f

BEGIN {
    for ( i = 1 ; i < = 10 ; i++ ) {
        print i, " to the second power is " , i * i;
    }
exit ;
}
別のforループは、変数を配列の連続インデックスに設定し、各インデックスに対してコマンドセットを実行します.すなわち、配列を使用してレコードからデータを「収集」します.
この例では、Unixコマンドuniqの簡略化されたバージョンを実現します.文字列リストをaと呼ばれる配列にキーとして追加し、同じキーが表示されるたびに値をインクリメントすることで、uniqの--countオプションなどの文字列の出現回数を算出できます.配列のキーを印刷すると、1回または複数の文字列が表示されます.
例えば、プレゼンテーションファイルを使用する.txt(以前の記事から):
name       color  amount
apple      red    4
banana     yellow 6
raspberry  red    99
strawberry red    3
grape      purple 10
apple      green  8
plum       purple 2
kiwi       brown  4
potato     brown  9
pineapple  yellow 5
これはawk形式のuniq-cの簡単なバージョンです.
#! /usr/bin/awk -f

NR ! = 1 {
    a [ $2 ] ++
}
END {
    for ( key in a ) {
                print a [ key ] " " key
    }
}
サンプル・データ・ファイルの3番目の列には、1番目の列にリストされたアイテムの数が含まれます.配列とforループを使用して、3番目の列のアイテムを色別にカウントできます.
#! /usr/bin/awk -f

BEGIN {
    FS = " " ;
    OFS = " \t " ;
    print ( "color \t sum" ) ;
}
NR ! = 1 {
    a [ $2 ] += $3 ;
}
END {
    for ( b in a ) {
        print b, a [ b ]
    }
}
ご覧のように、ファイルを処理する前に、BEFORE関数にタイトル列を印刷する必要があります(この列は常に1回のみ発生します).

ループ


ループは任意のプログラミング言語の重要な構成部分であり、awkも例外ではない.ループを使用すると、awkスクリプトの実行方法を制御し、どのような情報を収集し、データをどのように処理するかを制御できます.次の記事では、switch文、continue、nextについて説明します.
この文章を聞いてもいいですか.ハッカーコミュニティ放送会社のHacker Public Radioのセットから改編され、ハッカー向けのコンテンツです.
翻訳:https://opensource.com/article/19/11/loops-awk
awkでのループループ