Verwenden von Schleifen in awk

Verwenden von Schleifen in awk

Lernen wir verschiedene Arten von Schleifen kennen, die denselben Befehl mehrmals ausführen.

Ein awk-Skript besteht aus drei Hauptteilen: den Funktionen BEGIN und END (beide optional) und der vom Benutzer geschriebenen Funktion, die jedes Mal ausgeführt werden soll. In gewisser Weise ist der Hauptteil von awk eine Schleife, da die Befehle in der Funktion einmal für jeden Datensatz ausgeführt werden. Manchmal möchten Sie jedoch mehrere Befehle für einen Datensatz ausführen. In diesem Fall müssen Sie eine Schleife verwenden.

Es gibt viele Schleifentypen, die jeweils für unterschiedliche Szenarien geeignet sind.

While-Schleife

Eine While-Schleife testet einen Ausdruck und führt Befehle aus, wenn der Ausdruck wahr ist. Wenn der Ausdruck falsch wird, wird die Schleife unterbrochen.

#!/bin/awk -f
BEGINNEN {
    # Schleife durch 1 bis 10
  ich = 1;
  während (i <= 10) {
    print i, "hoch zwei Potenz ist ", i*i;
    i = i+1;
  }
Ausfahrt;
}

In diesem einfachen Beispiel druckt awk das Quadrat des ganzzahligen Werts in der Variablen i. Die Anweisung while (i <= 10) weist awk an, die Schleife nur auszuführen, wenn der Wert von i kleiner oder gleich 10 ist. Nachdem die Schleife zum letzten Mal ausgeführt wurde (der Wert von i ist 10), wird die Schleife beendet.

do-while-Schleife

Die do-while-Schleife führt die Befehle aus, die auf das Schlüsselwort do folgen. Am Ende jeder Iteration wird ein Testausdruck überprüft, um zu bestimmen, ob die Schleife beendet werden soll. Der Befehl wird nur wiederholt ausgeführt, solange der Testausdruck „true“ zurückgibt (d. h., die Bedingung, die die Schleife beendet, wurde noch nicht erreicht). Wenn der Testausdruck „false“ zurückgibt, wird die Schleife beendet, da die Bedingung zum Beenden der Schleife erreicht ist.

#!/usr/bin/awk -f
BEGINNEN {
    ich = 2;
    Tun {
        print i, "hoch zwei Potenz ist ", i*i;
        ich = ich + 1
    }
    während (i < 10)
Ausfahrt;
}

for-Schleife

Es gibt zwei Arten von For-Schleifen in awk.

Eine For-Schleife initialisiert eine Variable, prüft einen Testausdruck, erhöht die Variable und läuft so lange in einer Schleife, bis der Ausdruck als „true“ ausgewertet wird.

#!/bin/awk -f
BEGINNEN {
  für (i=1; i <= 10; i++) {
    print i, "hoch zwei Potenz ist ", i*i;
  }
Ausfahrt;
}

Eine weitere For-Schleife setzt eine Array-Variable mit aufeinanderfolgenden Indizes und führt für jeden Index einen Satz von Befehlen aus. Mit anderen Worten: Es wird ein Array verwendet, um die Ergebnisse jeder Befehlsausführung zu „sammeln“.

Dieses Beispiel implementiert eine vereinfachte Version des Unix-Befehls uniq. Indem Sie dem Array a eine Reihe von Zeichenfolgen als Schlüssel hinzufügen und den Schlüsselwert erhöhen, wenn der gleiche Schlüssel erneut auftritt, können Sie herausfinden, wie oft eine Zeichenfolge vorkommt (genau wie mit der Option --count von uniq). Wenn Sie alle Schlüssel des Arrays drucken, erhalten Sie alle Vorkommen der Zeichenfolge.

Nehmen Sie als Beispiel die Demodatei colors.txt (die Datei im vorherigen Artikel):

Name Farbe Menge
Apfelrot 4
Bananengelb 6
Himbeerrot 99
Erdbeerrot 3
Traube lila 10
Apfelgrün 8
Pflaume lila 2
kiwibraun 4
Kartoffel braun 9
ananasgelb 5

Hier ist eine einfache awk-Version von uniq -c:

#!/usr/bin/awk -f
NR != 1 {
  a[$2]++
}
ENDE {
  für (geben Sie a ein) {
        drucke a[Schlüssel] " " Schlüssel
  }
}

Die dritte Spalte der Beispieldatendatei ist eine Zählung der in der ersten Spalte aufgeführten Einträge. Sie können ein Array und eine For-Schleife verwenden, um die Einträge in der dritten Spalte nach Farbe zu zählen.

#!/usr/bin/awk -f
BEGINNEN {
  FS=" ";
  OFS="\t";
  drucken("Farbe\tSumme");
}
NR != 1 {
  ein[$2]+=$3;
}
ENDE {
  für (b in a) {
    drucke b, a[b]
  }
}

Sie sehen, dass wir vor der Verarbeitung der Datei auch in der BEFORE-Funktion (die nur einmal ausgeführt wird) eine Spaltenüberschrift drucken müssen.

Zyklus

Schleifen sind ein wichtiger Bestandteil jeder Programmiersprache und awk ist keine Ausnahme. Mithilfe von Schleifen können Sie steuern, wie das awk-Skript ausgeführt wird, welche Informationen es zählt und wie es Ihre Daten verarbeitet. Wir werden die Anweisungen „switch“, „continue“ und „next“ in unserem nächsten Artikel besprechen.

ps: Einfache Verwendung der awk-for-Schleife

Text:

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

Schleife, um den obigen Text auszudrucken

Festes Format der For-Schleife i=1 setzt die Anfangsvariable von i i<=NF i-Variable ist kleiner oder gleich dem Wert der NF-Variable (Anzahl der Felder pro Zeile) i++ bedeutet, dass i um +1 erhöht wird,

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

Zusammenfassen

Das Obige ist meine Einführung in die Verwendung von Schleifen in awk. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Verwendung des awk-Befehls im Shell-Skript
  • Detaillierte Beispiele zur Verwendung von regulären Ausdrücken und integrierten Funktionen von awk
  • Reguläre Ausdrücke der Shell: praktische Hinweise zu grep, sed und awk
  • Zusammenfassung der Verwendung der Split-Funktion in awk unter Linux
  • Awk-Befehl zum Zählen der Häufigkeit, mit der ein Schlüsselwort in einer Datei vorkommt
  • So verarbeiten Sie die letzte Zeile einer Datei mit sed oder awk
  • Beispiel für einen AWK-Intervallwert
  • Awk-Einführung und Sammlung von Studiennotizen

<<:  Der gesamte Prozessbericht der Vue-Exportfunktion für Excel

>>:  Das neueste grafische Tutorial zur Installation von MySQL 8.0.16 Winx64 unter Win10

Artikel empfehlen

Lernprogramm zur Verwendung von HTML-Formular-Tags

Mithilfe von HTML-Formularen können verschiedene ...

setup+ref+reactive implementiert Vue3-Reaktionsfähigkeit

Das Setup wird zum Schreiben kombinierter APIs ve...

Drei Netzwerkmethoden und Prinzipien von virtuellen VMware-Maschinen (Zusammenfassung)

1. Brigde——Bridge: VMnet0 wird standardmäßig verw...

So betreiben Sie eine MySQL-Datenbank mit dem ORM-Modell-Framework

Was ist ORM? ORM steht für Object Relational Mapp...

Detaillierte Analyse der MySQL-Indexdatenstruktur

Inhaltsverzeichnis Überblick Indexdatenstruktur B...

JS verwendet Canvas-Technologie, um Echarts-Balkendiagramme zu imitieren

Canvas ist ein neues Tag in HTML5. Sie können js ...

HTML+CSS-Implementierungscode für abgerundete Rechtecke

Mir war langweilig und plötzlich fiel mir die Impl...

Aufbau einer Zookeeper-Standalone-Umgebung und einer Clusterumgebung

1. Aufbau einer Einzelmaschinenumgebung# 1.1 Heru...

HTML-Beispielcode zur Implementierung des Tab-Wechsels

Tab-Umschalten ist auch eine gängige Technologie ...

Detaillierte Einführung in den MySql-Index und korrekte Verwendungsmethode

Detaillierte Einführung in den MySql-Index und ko...