Website-Suche

Arbeiten mit awk-Variablen, Ausdrücken und Operatoren


Die Awk-Befehlsserie wird spannend! Ich glaube, dass wir in den vorherigen sieben Teilen einige Grundlagen von Awk durchlaufen haben, die Sie beherrschen müssen, um grundlegende Text- oder Zeichenfolgenfilterung unter Linux durchführen zu können.

Beginnend mit diesem Teil werden wir in fortgeschrittene Bereiche von Awk eintauchen, um komplexere Text- oder String-Filteroperationen zu handhaben. Daher werden wir AWK-Funktionen wie Variablen, numerische Ausdrücke und Zuweisungsoperatoren behandeln.

Diese Konzepte unterscheiden sich nicht wesentlich von denen, die Sie möglicherweise bereits in vielen Programmiersprachen wie Shell, C, Python und vielen anderen angetroffen haben. Es gibt also keinen Grund, sich über dieses Thema große Sorgen zu machen; Wir überarbeiten lediglich die gängigen Vorstellungen über die Verwendung dieser Funktionen.

Dies wird wahrscheinlich einer der am einfachsten zu verstehenden Awk-Befehlsabschnitte sein, also lehnen Sie sich zurück und legen Sie los

1. Awk-Variablen

In jeder Programmiersprache ist eine Variable ein Platzhalter, der einen Wert speichert. Wenn Sie eine Variable in einer Programmdatei erstellen, wird beim Ausführen der Datei ein Speicherplatz im Speicher erstellt, in dem der Wert gespeichert wird, den Sie für die Variable angeben.

Sie können Awk-Variablen auf die gleiche Weise wie folgt definieren, wie Sie Shell-Variablen definieren:

variable_name=value 

In der obigen Syntax:

  • variable_name: ist der Name, den Sie einer Variablen geben.
  • value: Der Wert, der in der Variablen gespeichert ist.

Schauen wir uns im Folgenden einige Beispiele an:

computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”

Schauen Sie sich die einfachen Beispiele oben an, in der ersten Variablendefinition wird der Wert linux-console.net der Variablen computer_name zugewiesen.

Darüber hinaus wird der Variable port_no der Wert 22 zugewiesen, es ist auch möglich, den Wert einer Variablen einer anderen Variablen zuzuweisen, wie im letzten Beispiel, wo wir der Variablen server den Wert computer_name zugewiesen haben.

Wenn Sie sich erinnern können, haben wir direkt in Teil 2 dieser Awk-Serie, in dem wir die Feldbearbeitung behandelt haben, darüber gesprochen, wie Awk Eingabezeilen in Felder unterteilt und einen Standard-Feldzugriffsoperator, $, verwendet, um die verschiedenen Felder zu lesen, die analysiert wurden. Wir können auch Variablen verwenden, um die Werte von Feldern wie folgt zu speichern.

first_name=$2
second_name=$3

In den obigen Beispielen wird der Wert von first_name auf das zweite Feld und second_name auf das dritte Feld festgelegt.

Stellen Sie sich zur Veranschaulichung eine Datei mit dem Namen names.txt vor, die eine Liste von Benutzern enthält, die ihren Vor- und Nachnamen sowie das Geschlecht angeben.

Mit dem Befehl cat können wir den Inhalt der Datei wie folgt anzeigen

cat names.txt

Dann können wir auch die Variablen first_name und second_name verwenden, um den Vor- und Nachnamen des ersten Benutzers in der Liste zu speichern, indem wir den folgenden Befehl Awk ausführen:

awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt

Werfen wir auch einen Blick auf einen anderen Fall: Wenn Sie den Befehl uname -a auf Ihrem Terminal ausgeben, werden alle Ihre Systeminformationen ausgedruckt.

Das zweite Feld enthält Ihren Hostnamen, daher können wir den Hostnamen in einer Variablen namens hostname speichern und ihn mit Awk wie folgt ausgeben:

uname -a
uname -a | awk '{hostname=$2 ; print hostname ; }' 

2. Numerische Ausdrücke

In Awk werden numerische Ausdrücke mit den folgenden numerischen Operatoren erstellt:

  • * : Multiplikationsoperator
  • + : Additions-Operator
  • / : Abteilungsoperator
  • - : Subtraktionsoperator
  • % : Modul-Operator
  • ^ : Potenzierungsoperator

Die Syntax für einen numerischen Ausdruck lautet:

operand1 operator operand2

In der obigen Form können Operand1 und Operand2 Zahlen oder Variablennamen sein, und Operator ist einer der oben genannten Operatoren.

Im Folgenden finden Sie einige Beispiele, um zu veranschaulichen, wie numerische Ausdrücke erstellt werden:

counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1

Um die Verwendung von numerischen Ausdrücken in Awk zu verstehen, betrachten wir das folgende Beispiel mit der Datei domains.txt, die alle Domains enthält, die Tecmint gehören.

news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net

Um den Inhalt der Datei anzuzeigen, verwenden Sie den folgenden Befehl:

cat domains.txt

Wenn wir zählen möchten, wie oft die Domain linux-console.net in der Datei erscheint, können wir ein einfaches Skript schreiben, um dies wie folgt zu tun:

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Nachdem Sie das Skript erstellt haben, speichern Sie es und machen Sie es ausführbar, wenn wir es mit der Datei domains.txt als Eingabe ausführen, erhalten wir die folgende Ausgabe:

./script.sh  ~/domains.txt

Aus der Ausgabe des Skripts gibt es 6 Zeilen in der Datei domains.txt die linux-console.net enthalten, um zu bestätigen, dass Sie sie manuell zählen können.

3. Zuweisungs-Operatoren

Die letzte Awk-Funktion, die wir behandeln werden, sind Zuweisungsoperatoren, es gibt mehrere Zuweisungsoperatoren in Awk und dazu gehören die folgenden:

  • *= : Operator für die Multiplikationszuweisung
  • += : Operator für die Additionszuweisung
  • /= : Operator für die Teilungszuweisung
  • -= : Operator für die Subtraktionszuweisung
  • %= : Modulus-Zuweisungsoperator
  • ^= : Operator für die Potenzierungszuweisung

Die einfachste Syntax einer Zuweisungsoperation in Awk lautet wie folgt:

variable_name=variable_name operator operand

Beispiele:

counter=0
counter=counter+1

num=20
num=num-1

Sie können die obigen Zuweisungsoperatoren verwenden, um Zuweisungsoperationen in Awk zu verkürzen, betrachten Sie die vorherigen Beispiele, wir könnten die Zuweisung in der folgenden Form durchführen:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Daher können wir den Awk-Befehl in dem Shell-Skript, das wir gerade oben geschrieben haben, mit dem Zuweisungsoperator += wie folgt ändern:

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter+=1 ; printf  "%s\n",  counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

In diesem Abschnitt der Awk-Befehlsreihe haben wir einige leistungsstarke Awk-Funktionen behandelt, d. h. Variablen, das Erstellen numerischer Ausdrücke und die Verwendung von Zuweisungsoperatoren, sowie einige Abbildungen, wie wir sie tatsächlich verwenden können.

Diese Konzepte unterscheiden sich nicht von denen in anderen Programmiersprachen, aber es kann einige signifikante Unterschiede unter der Awk-Programmierung geben.

In Teil 9 werden wir uns weitere Awk-Funktionen ansehen, bei denen es sich um spezielle Muster handelt: BEGIN und END. Bleiben Sie bis dahin mit Tecmint in Verbindung.

Für diejenigen, die eine umfassende Ressource suchen, haben wir alle Artikel der Awk-Serie in einem Buch zusammengestellt, das 13 Kapitel umfasst und sich über 41 Seiten erstreckt und sowohl die grundlegende als auch die fortgeschrittene Verwendung von Awk mit praktischen Beispielen abdeckt.

ProduktnamePreisKaufen
E-Book: Einführung in den AWK-Leitfaden für Anfänger8,99 $[Jetzt kaufen]

Verwandte Artikel: