Der Awk-Befehl / das Awk-Tool wird verwendet, um Textzeilen und -spalten in einer Datei zu manipulieren. Awk verfügt über eingebaute String-Funktionen und assoziative Arrays. Awk unterstützt die meisten Operatoren und bedingten Blöcke, die in der Sprache C verfügbar sind. awk scripting
awk scripting
Eines der guten Dinge ist, dass wir den awk-Befehl zusammen mit anderen Befehlen verwenden können, um die gewünschte Ausgabe zu erreichen. Wir können auch awk-Skripte in Perl konvertieren.
Grundlegende Systax von awk: ‚BEGIN {start_action} {action} END {stop_action}‘ file_name
Hier sind die Aktionen
- Begin-Block wird vor der Datei ausgeführt
- End-Block wird nach der Verarbeitung der Datei ausgeführt
- Rest der Aktionen wird während der Verarbeitung der Datei ausgeführt
Beispiele: Erstellen Sie eine Datei mit dem Namen test, in der folgende Daten enthalten sind
# cat test
Aus den obigen Daten können Sie ersehen, dass die Datei Zeilen und Spalten hat, die durch Leerzeichen getrennt sind, und die Zeilen sind neue Zeilen. Um diesen Artikel zu erklären, werden wir für ein paar Beispiele eine Testdatei verwenden.
Befehlssyntax: awk ‚{print $3}‘ test
Hier hat $3 die Bedeutung, die dritte Spalte aus allen Spalten der Testdatei zu drucken. Wenn Sie mehrere Spalten drucken möchten, erwähnen Sie die Spaltennamen durch Komma getrennt $1,$2,$3….. unten ist die Ausgabe, die als 3. Spalte in allen Zeilen
# awk '{ print $3 }' testroot# awk '{ print $1,$3,$6 }' test-rw-r--r--. root Apr
Um die 4. und 6. Spalte in einer Datei zu drucken, verwenden Sie awk ‚{print $4,$6}‘ test
Hier werden die Anfangs- und Endblöcke in awk nicht verwendet. Der print-Befehl wird also für jede Zeile, die er aus der Datei liest, ausgeführt. Im nächsten Beispiel werden wir sehen, wie man begin- und end-Blöcke verwendet.
Summe des Spaltenwertes drucken
Befehlssyntax: awk ‚BEGIN {sum=0} {sum=sum+$7} END {print sum}‘ test
Das obige Beispiel druckt die Summe des Wertes in der 7. Spalte. Im begin-Block wird die Variable sum mit dem Wert 0 zugewiesen. Im nächsten Block wird der Wert der 7. Spalte zu der Variablen sum addiert. Dieses Hinzufügen der 7. Spalte zur Variablen sum wiederholt sich für jede verarbeitete Zeile. Wenn alle Zeilen abgearbeitet sind, enthält die Summenvariable die Summe der Werte in der 7. Spalte. Dieser Wert wird im End-Block gedruckt, wie unten gezeigt:
# awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test300
Summe der Spaltenwerte mit awk-Skript
Im zweiten Beispiel haben wir gesehen, wie man den Wert der Spalte 7 summiert, und zwar auf dieselbe Weise, anstatt in einer einzeiligen Anweisung, die wir als Skript schreiben. Erstellen Sie eine Datei sumofcolumn und fügen Sie das folgende Skript in diese Datei ein
#!/usr/bin/awk -fBEGIN {sum=0} {sum=sum+$7} END {print sum}
Nun führen Sie das Skript mit dem awk-Befehl aus, wie unten gezeigt
# awk -f sumofcolumn test300
Damit wird das Skript in der Datei sumofcolumn ausgeführt und die Summe der siebten Spalte im Test angezeigt.
String finden und übereinstimmende Zeile drucken
Befehlssyntax: awk ‚{if($9 == „arkit“) print $0;}‘ test
Das obige Beispiel sucht nach dem String „arkit“ in der dritten Spalte und wenn es eine Übereinstimmung findet, wird die gesamte Zeile gedruckt. Die Ausgabe dieses awk-Befehls ist unten
# awk '{ if($3 == "arkit") print $0;}' test
For-Schleife mit Multiplikation des genannten Wertes, erhöht um +1
Befehlssyntax: awk ‚BEGIN { for(i=1;i<=10;i++) print „Multiplizierter Wert von“, i, „ist“,i*i; }‘
Der obige Befehl wird die Multiplikation der ersten Zahlen von 1 bis 10 ausgeben. Mit i++ wird +1 zur Zahl addiert, so dass sie sich bis 10 weiter erhöht. Die Ausgabe des Befehls ist unten zu sehen
# awk 'BEGIN { for(i=1;i<=10;i++) print "Multiplied value of", i, "is",i*i; }'Multiplied value of 1 is 1
6. Eingabefeld Trennzeichen
Sie haben bereits $0,$1,$2… gesehen, die die gesamte Zeile, erste Spalte, zweite Spalte… ausgeben. Jetzt sehen wir uns andere eingebaute Variablen mit Beispielen an.
In unserer Beispieldatei test haben wir Spalten, die durch ein Leerzeichen getrennt sind, aber anstelle des Leerzeichens können wir auch jedes andere Symbol wie .d.h. : , – zum Trennen und Drucken verwenden.
Beispiel: Wenn Sie : (Doppelpunkt) als Trennzeichen haben, dann verwenden Sie unten
awk ‚BEGIN {FS=“:“} {print $2}‘ test
Oder
awk -F: ‚{print $2}‘ test
Damit wird die Ausgabe wie folgt gedruckt
# awk -F: '{print $2}' test41 file12
OFS – Ausgabefeld-Trennvariable
Standardmäßig werden beim Drucken der Felder mit der print-Anweisung die Felder mit einem Leerzeichen als Trennzeichen angezeigt. Zum Beispiel
Befehlssyntax: awk ‚{print $4,$5}‘ test
# awk '{print $4,$5}' testroot 0
Wir können dieses Standardverhalten mit der OFS-Variable ändern als
Befehlssyntax: awk ‚BEGIN {OFS=“:“} {print $4,$5}‘ test
# awk 'BEGIN {OFS=":"} {print $4,$5}' testroot:0
Hinweis: print $4,$5 und print $4$5 funktionieren nicht auf die gleiche Weise. Die erste gibt die Ausgabe mit Leerzeichen als Begrenzer aus. Die zweite zeigt die Ausgabe ohne Begrenzungszeichen an.
NF – Anzahl der Felder zählen
NF kann verwendet werden, um die Anzahl der Felder in jeder Zeile zu ermitteln
# awk '{print NF}' test9
NR – Anzahl der Datensätze
NR kann verwendet werden, um die Zeilennummer oder die Anzahl der Zeilen in einer Datei zu ermitteln
# awk '{print NR}' test12345678910
Das obige Beispiel wird die Zeilennummer ausgeben, in der Testdatei haben wir zehn Zeilen.
Anzahl der Datensätze in einer bestimmten Datei ausgeben
Wenn Sie das obige Beispiel des 9. Abschnitts sehen, werden alle Zeilennummern ausgegeben, aber die Anforderung ist, dass ich nur die Anzahl der Datensätze sehen möchte.
# awk 'END {print NR}' test10
Dies zeigt die Gesamtanzahl der Zeilen in der Testdatei an.
Stringfunktionen in Awk:
Einige der Stringfunktionen in Awk sind:
- index(string,search)
- length(string)
- split(string,array,separator)
- substr(string,Position)
- substr(string,position,max)
- tolower(string)
- toupper(string)
Erweiterte Beispiele:
Zeilen filtern mit der Awk-Split-Funktion
Die awk-Split-Funktion zerlegt eine Zeichenkette in ein Array unter Verwendung des Trennzeichens.
Die Syntax der split-Funktion lautet
split(string, array, delimiter)
Nun wollen wir anhand eines Beispiels sehen, wie man mit der split-Funktion die Zeilen filtert.
Die Eingabe „advanced.txt“ enthält die Daten in folgendem Format
# cat advanced.txt1 U,N,ARKIT,0002 A,B,TEST,1113 I,M,ARKIT,2224 C,D,TECH,3335 T,I,RAVI,444
Erforderliche Ausgabe: Nun sollen nur die Zeilen ausgegeben werden, in denen das 2. Feld die Zeichenkette „ARKIT“ als 3. Feld hat.
The output is:1 U,N,ARKIT,0003 I,M,ARKIT,222
Der awk-Befehl, um die Ausgabe zu erhalten, ist unten aufgeführt
Command: awk '{ split($2,arr,","); if(arr == "0") print $0 } ' advanced.txt
# awk '{ split($2,arr,","); if(arr == "ARKIT") print $0} ' advanced.txt1 U,N,ARKIT,0003 I,M,ARKIT,222
Ein paar awk-Befehle / Tool-Beispiele werden wir in einem kommenden Beitrag sehen Stay tune.
Schlüsselwörter: awk scripting in linux,how to run a awk script in linux,how to write an awk script in linux,awk in linux bash,awk in linux command,awk script examples linux,awk in linux example,awk in linux means,awk in linux pdf,awk in linux programming,awk in linux ppt,awk in linux shell script,awk befehl in linux shell scripting,awk in linux tutorial,awk in linux terminal,awk in linux mit beispielen,awk scripting, awk scripting, awk scripting, awk scripting, awk scripting
Danke für das Lesen.