Website-Suche

Arbeiten Sie mit Awk-Variablen, Ausdrücken und Operatoren


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

Beginnend mit diesem Teil werden wir in fortgeschrittene Bereiche von Awk eintauchen, um komplexere Text- oder String-Filtervorgänge durchzuführen. 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 kennengelernt haben. Es besteht also kein Grund, sich über dieses Thema große Sorgen zu machen. Wir überarbeiten lediglich die allgemeinen Vorstellungen zur Verwendung dieser Funktionen.

Dies wird wahrscheinlich einer der am einfachsten zu verstehenden Awk-Befehlsabschnitte sein, also lehnen Sie sich zurück und legen wir 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 bei der Ausführung der Datei etwas Speicherplatz im Speicher geschaffen, der den Wert speichert, den Sie für die Variable angeben.

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

variable_name=value 

In der obigen Syntax:

  • variable_name: ist der Name, den Sie einer Variablen geben.
  • Wert: der in der Variablen gespeicherte Wert.

Schauen wir uns unten 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 Variablen 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 den Wert zugewiesen haben von computer_name an den Variablenserver.

Wenn Sie sich erinnern, haben wir direkt in Teil 2 dieser Awk-Serie, in dem wir uns mit der Feldbearbeitung befasst haben, darüber gesprochen, wie Awk Eingabezeilen in Felder unterteilt und einen Standard-Feldzugriffsoperator, $, verwendet, um die verschiedenen Felder zu lesen Felder, die analysiert wurden. Wir können Variablen auch wie folgt verwenden, um die Werte von Feldern 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 gesetzt.

Betrachten Sie zur Veranschaulichung eine Datei namens names.txt, die eine Liste von Benutzern mit ihren Vor- und Nachnamen sowie ihrem Geschlecht enthält.

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, wie durch Ausführen von Awk Befehl unten:

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

Schauen wir uns auch einen anderen Fall an: Wenn Sie den Befehl uname -a auf Ihrem Terminal eingeben, 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 ausdrucken > wie folgt:

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

2. Numerische Ausdrücke

In Awk werden numerische Ausdrücke mithilfe der folgenden numerischen Operatoren erstellt:

  • *: Multiplikationsoperator
  • + : Additionsoperator
  • / : Divisionsoperator
  • -: Subtraktionsoperator
  • %: Moduloperator
  • ^ : Potenzierungsoperator

Die Syntax für einen numerischen Ausdruck lautet:

operand1 operator operand2

Im obigen Formular können operand1 und operand2 Zahlen oder Variablennamen sein, und operator ist einer der oben genannten Operatoren.

Nachfolgend finden Sie einige Beispiele, die veranschaulichen, wie numerische Ausdrücke erstellt werden:

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

Um die Verwendung numerischer Ausdrücke in Awk zu verstehen, betrachten wir das folgende Beispiel mit der Datei domains.txt, die alle Domänen 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 vorkommt, können wir dazu ein einfaches Skript wie folgt schreiben:

#!/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 geht hervor, dass die Datei domains.txt 6 Zeilen enthält, die linux-console.net enthalten, um zu bestätigen, dass Sie sie manuell zählen können.

3. Zuweisungsoperatoren

Die letzte Awk-Funktion, die wir behandeln werden, sind Zuweisungsoperatoren. Es gibt mehrere Zuweisungsoperatoren in Awk, darunter die folgenden:

  • *=: Multiplikationszuweisungsoperator
  • +=: Additionszuweisungsoperator
  • /=: Divisionszuweisungsoperator
  • -=: Subtraktionszuweisungsoperator
  • %=: Modulzuweisungsoperator
  • ^=: Potenzierungszuweisungsoperator

Die einfachste Syntax einer Zuweisungsoperation in Awk ist wie folgt:

variable_name=variable_name operator operand

Beispiele:

counter=0
counter=counter+1

num=20
num=num-1

Sie können die oben genannten Zuweisungsoperatoren verwenden, um Zuweisungsvorgänge 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 Befehl Awk im 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-Befehlsserie haben wir einige leistungsstarke Awk-Funktionen behandelt, nämlich Variablen, das Erstellen numerischer Ausdrücke und die Verwendung von Zuweisungsoperatoren, sowie ein paar Illustrationen, wie wir sie tatsächlich verwenden können.

Diese Konzepte unterscheiden sich nicht von denen in anderen Programmiersprachen, es kann jedoch bei der Awk-Programmierung einige wesentliche Unterschiede 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-Reihe in einem Buch zusammengestellt, das 13 Kapitel und 41 Seiten umfasst und sowohl die grundlegende als auch die fortgeschrittene Awk-Nutzung mit praktischen Beispielen abdeckt.

Product Name Price Buy
eBook: Introducing the Awk Getting Started Guide for Beginners $8.99 [Buy Now]