GNU/Linux >> Linux の 問題 >  >> Linux

ループに巻き込まれましたか? Awk While、Do While、For ループ、Break、Continue、Exit の例

この記事は、進行中の Awk チュートリアル サンプル シリーズの一部です。以前の awk 記事では、awk print、awk ユーザー定義変数、awk 組み込み変数、awk 演算子、および awk 条件ステートメントについて説明しました。

この記事では、awk ループ についておさらいしましょう。 ステートメント – while、do while、for ループ 、break、continue、および exit ステートメントと 7 つの実用的な例を示します。

一連のアクションを連続して何度も実行するには、awk ループ ステートメントを使用します。条件が真である限り、ステートメントを繰り返し実行します。 Awk には、「C」プログラミング言語のように、多数のループ ステートメントがあります。

Awk While ループ

Syntax:

while(condition)
	actions
  • while はキーワードです。
  • 条件は条件式です
  • アクションは、1 つ以上のステートメントを持つことができる while ループの本体です。アクションに複数のステートメントがある場合は、中かっこで囲む必要があります。

仕組みしばらくの間 ループは最初に条件をチェックし、条件が真の場合、アクションのリストを実行します。アクションの実行が完了したら、再度条件をチェックし、true の場合は再度アクションを実行します。このプロセスは、条件が false になるまで繰り返されます。最初の反復で条件が false を返す場合、アクションは実行されません。

1. Awk While ループの例:特定の長さの文字列を作成する

$awk 'BEGIN { while (count++<50) string=string "x"; print string }'
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

上記の例では、Awk プログラムで他の何よりも先に実行される「BEGIN { }」特殊ブロックを使用しています。このブロックでは、awk while ループが文字「x」を変数「string」に 50 回追加します。 count はインクリメントされ、50 未満であることを確認する変数です。したがって、50 回の反復の後、この条件は false になります。
ループした後、「文字列」変数が出力されます。この Awk プログラムには本体がないため、BEGIN ブロックの実行後に終了します。

Awk Do-While ループ

仕組みその間にやること ループは出口制御ループと呼ばれ、awk while ループは入口制御ループと呼ばれます。 while ループは最初に条件をチェックするため、本体を実行するかどうかを決定します。しかし、awk do while ループは本体を 1 回実行し、条件が真である限り本体を繰り返します。

Syntax:

do
action
while(condition)

条件が false であっても、最初にアクションが少なくとも 1 回実行されます。

2. Awk Do While ループの例:メッセージを少なくとも 1 回出力する

$ awk 'BEGIN{
count=1;
do
print "This gets printed at least once";
while(count!=1)
}'
This gets printed at least once

上記のスクリプトでは、print ステートメントが少なくとも 1 回実行されます。while ステートメントを使用すると、最初にカウントが 1 に初期化された後に条件がチェックされ、最初の反復自体で条件が false になるため、print ステートメントは実行されません。 t は実行されますが、最初の本体が実行される間に do が実行されるため、print ステートメントを実行します。

Awk For ループ ステートメント

おっと ステートメントは awk while ループと同じですが、構文がはるかに使いやすくなっています。

Syntax:

for(initialization;condition;increment/decrement)
actions

仕組みやばい ステートメントは初期化の実行から開始し、条件をチェックし、条件が true の場合はアクションを実行し、次にインクリメントまたはデクリメントします。その後、条件が true である限り、アクションの実行とインクリメント/デクリメントを繰り返します。

3. Awk For ループの例。すべての行のフィールドの合計を出力します。

$ awk '{ for (i = 1; i <= NF; i++) total = total+$i }; END { print total }'
12 23 34 45 56
34 56 23 45 23
351

最初に変数 i は 1 に初期化され、次に i がフィールドの総数以下かどうかをチェックし、すべてのフィールドを追加し続け、最後に追加が変数 total に格納されます。 END ブロックでは、変数の合計を表示するだけです。

4. Awk For ループの例:フィールドをすべての行で逆順に出力します。

$ awk 'BEGIN{ORS="";}{ for (i=NF; i>0; i--) print $i," "; print "\n"; }' student-marks
77  84  78  2143  Jones
45  58  56  2321  Gondrol
37  38  2122  RinRao
95  97  87  2537  Edwin
47  30  2415  Dayan

前回の記事で awk NF 組み込み変数について説明しました。各行を処理した後、Awk は NF 変数をその行で見つかったフィールド数に設定します。

上記のスクリプトは、NF から 1 まで逆順にループし、フィールドを 1 つずつ出力します。フィールド $NF で始まり、次に $(NF-1)、…、$1 です。その後、改行文字を出力します。

ループ文で使用できる他の文をいくつか見てみましょう。

Awk Break ステートメント

Break ステートメントは、それを囲む最も内側のループ (while、do-while、および for ループ) から飛び出すために使用されます。

5. Awk Break の例:10 回の反復のみを実行する Awk スクリプト

$ awk 'BEGIN{while(1) print "forever"}'

上記の awk while ループは、条件が決して失敗しないため、文字列「forever」を永久に出力します。最初の 10 回の反復後にループを停止する場合は、以下のスクリプトを参照してください。

$ awk 'BEGIN{
x=1;
while(1)
{
print "Iteration";
if ( x==10 )
break;
x++;
}}'
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration
Iteration

上記のスクリプトでは、変数「x」の値をチェックし、10 に達したら、break ステートメントを使用してループから飛び出します。

Awk Continue ステートメント

Continue ステートメントは、ループ本体の残りをスキップして、ループの次のサイクルをすぐに開始します。

6. Awk Continue 例:5 回目の反復を除いてループを実行

$ awk 'BEGIN{
x=1;
while(x<=10)
{
if(x==5){
x++;
continue;
}
print "Value of x",x;x++;
}
}'
Value of x 1
Value of x 2
Value of x 3
Value of x 4
Value of x 6
Value of x 7
Value of x 8
Value of x 9
Value of x 10

上記のスクリプトでは、反復ごとに x の値を出力しますが、x の値が 5 に達すると、x の値をインクリメントするだけで、次の反復を続行し、ループの残りの本体を実行しません。そのため、x の値は値 5 に対して出力されません。continue ステートメントは、ループ内で with を使用する場合にのみ意味を持ちます。

Awk Exit ステートメント

exit ステートメントにより、スクリプトは現在の入力の実行を即座に停止し、残りのすべての入力が無視される入力の処理を停止します。

Exit は、awk プロセスの終了ステータス コードとなる任意の整数を引数として受け入れます。引数が指定されていない場合、exit はステータス 0 を返します。

7. Awk 終了例:5 回目の繰り返しでループを終了

$ awk 'BEGIN{
x=1;
while(x<=10)
{
if(x==5){
exit;}
print "Value of x",x;x++;
}
}'
Value of x 1
Value of x 2
Value of x 3
Value of x 4

上記のスクリプトでは、x の値が 5 に達すると、exit が呼び出され、awk プロセスの実行が停止されます。したがって、x の値は 4 までしか表示されず、5 に達すると終了します。

推奨読書

<強い> Ramesh Natarajan による Sed と Awk の 101 ハック .テキスト ファイル (データ、構成、およびログ ファイル) を扱う UNIX/Linux 環境で、1 日に数時間を費やしています。私はすべてのテキスト操作作業に Sed と Awk を使用しています。私の Sed と Awk の経験に基づいて、Sed と Awk のさまざまな高度な機能に関する 101 の実用的な例を含む Sed and Awk 101 Hacks eBook を作成しました。これにより、UNIX/Linux の生活が向上します。 Sed と Awk を数年間使用しており、この本をまだ読んでいない場合でも、ぜひこの本を読んでください。 Sed および Awk ユーティリティの機能に驚かれることでしょう。


Linux
  1. 初心者向けのLinuxexitコマンドの説明(例付き)

  2. 初心者向けの例を含むNumfmtコマンドチュートリアル

  3. 初心者向けの例を含むタイプコマンドチュートリアル

  1. BashForループガイドと例

  2. Bash for ループの例

  3. bashでループの終了ステータスを取得する方法

  1. Linuxスクリプト:Bashでのwhileループの3つのハウツー

  2. Bash の For ループと While ループの例

  3. ループの維持 – Bash For、While、Until ループの例