Website-Suche

So erlauben Sie Awk, Shell-Variablen zu verwenden – Teil 11


Wenn wir Shell-Skripte schreiben, beziehen wir normalerweise andere kleinere Programme oder Befehle wie Awk-Operationen in unsere Skripte ein. Im Fall von Awk müssen wir Möglichkeiten finden, einige Werte von der Shell an Awk-Operationen zu übergeben.

Dies kann durch die Verwendung von Shell-Variablen in Awk-Befehlen erreicht werden. In diesem Teil der Serie erfahren Sie, wie Sie Awk erlauben, Shell-Variablen zu verwenden, die Werte enthalten können, die wir an Awk-Befehle übergeben möchten.

Es gibt möglicherweise zwei Möglichkeiten, Awk die Verwendung von Shell-Variablen zu ermöglichen:

1. Verwendung von Shell Quoting

Schauen wir uns ein Beispiel an, um zu veranschaulichen, wie Sie Shell-Anführungszeichen tatsächlich verwenden können, um den Wert einer Shell-Variablen in einem Awk-Befehl zu ersetzen. In diesem Beispiel möchten wir in der Datei /etc/passwd nach einem Benutzernamen suchen, die Kontoinformationen des Benutzers filtern und ausdrucken.

Daher können wir ein test.sh-Skript mit folgendem Inhalt schreiben:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

Speichern Sie anschließend die Datei und beenden Sie den Vorgang.

Interpretation des Awk-Befehls im obigen test.sh-Skript:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " – Shell-Anführungszeichen, die verwendet werden, um den Wert der Shell-Variablen username im Awk-Befehl zu ersetzen. Der Wert von Benutzername ist das Muster, nach dem in der Datei /etc/passwd gesucht werden soll.

Beachten Sie, dass sich das doppelte Anführungszeichen außerhalb des Awk-Skripts befindet, ‘{ print $0 }’.

Machen Sie dann das Skript ausführbar und führen Sie es wie folgt aus:

chmod  +x  test.sh
./text.sh 

Nachdem Sie das Skript ausgeführt haben, werden Sie aufgefordert, einen Benutzernamen einzugeben, einen gültigen Benutzernamen einzugeben und die Eingabetaste zu drücken. Sie sehen die Kontodetails des Benutzers aus der Datei /etc/passwd wie folgt:

2. Verwendung der Variablenzuweisung von Awk

Diese Methode ist im Vergleich zur oben genannten Methode viel einfacher und besser. Betrachtet man das obige Beispiel, können wir einen einfachen Befehl ausführen, um die Aufgabe zu erledigen. Bei dieser Methode verwenden wir die Option -v, um einer Awk-Variablen eine Shell-Variable zuzuweisen.

Erstellen Sie zunächst eine Shell-Variable, username, und weisen Sie ihr den Namen zu, nach dem wir in der Datei /etc/passswd suchen möchten:

username="aaronkilik"

Geben Sie dann den folgenden Befehl ein und drücken Sie die Eingabetaste:

cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Erklärung des obigen Befehls:

  1. -v – Awk-Option zum Deklarieren einer Variablen
  2. username – ist die Shell-Variable
  3. name – ist die Awk-Variable

Werfen wir einen genauen Blick auf $0 ~ name im Awk-Skript, ' $0 ~ name {print $0}'. Denken Sie daran: Als wir uns in Teil 4 dieser Serie mit Awk-Vergleichsoperatoren befassten, war einer der Vergleichsoperatoren value ~ pattern, was bedeutet: wahr, wenn der Wert mit dem Muster übereinstimmt.

Der output($0) des an Awk weitergeleiteten cat-Befehls entspricht dem Muster (aaronkilik), dem Namen, nach dem wir in /etc/passwd suchen , als Ergebnis ist die Vergleichsoperation wahr. Die Zeile mit den Kontoinformationen des Benutzers wird dann auf dem Bildschirm ausgedruckt.

Abschluss

Wir haben einen wichtigen Abschnitt der Awk-Funktionen behandelt, der uns bei der Verwendung von Shell-Variablen in Awk-Befehlen helfen kann. Oftmals werden Sie kleine Awk-Programme oder -Befehle in Shell-Skripten schreiben und müssen daher ein klares Verständnis für die Verwendung von Shell-Variablen in Awk-Befehlen haben.

Im nächsten Teil der Awk-Reihe werden wir uns mit einem weiteren wichtigen Abschnitt der Awk-Funktionen befassen, nämlich den Flusskontrollanweisungen. Bleiben Sie also auf dem Laufenden und lassen Sie uns weiter lernen und teilen.