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] |