Die grundlegendste Funktion von awk besteht darin, Informationen basierend auf bestimmten Regeln in Dateien oder Zeichenfolgen zu durchsuchen und zu extrahieren. Sie wird verwendet, um eine Zeile zur Verarbeitung in mehrere „Felder“ zu unterteilen. Geeignet für die Verarbeitung kleiner Datenmengen.
Beispiel:
cat /etc/passwd | /passwd wird durch „:“ getrennt, überprüfen Sie die Daten in der dritten Spalte auf weniger als 10 und zeigen Sie nur die Kontonummer und die dritte Spalte an.
Ausführungsmethode, z als:
awk [-Field-separator] 'Befehle' Eingabedatei(en)
Hier sind Befehle die echten awk-Befehle, [-F Feldtrenner] ist optional, awk verwendet Leerzeichen standardmäßig getrennt. Wenn Sie also Text mit Leerzeichen zwischen Feldern durchsuchen möchten, müssen Sie diese Option nicht angeben. Wenn Sie jedoch eine Datei wie passwd durchsuchen, die Doppelpunkte als Trennzeichen für jedes Feld verwendet, müssen Sie -F verwenden Option: awk -F : 'commands' input -file
Wenn awk ausgeführt wird, sind seine Browsing-Tags $1, $2...$n, diese Methode wird Domain genannt Markieren. Verwenden Sie $1 und $3, um auf das erste und dritte Feld zu verweisen. Beachten Sie, dass Kommas zum Trennen der Felder verwendet werden und $0 bedeutet, dass alle Felder verwendet werden. Zum Beispiel:
awk '{print $0}' temp.txt > sav.txt
bedeutet, dass alle Felder gedruckt und die Ergebnisse umgeleitet werden Gehen Sie zu sav.txt
awk '{print $0}' temp.txt |. sav.txt
Ähnlich wie im obigen Beispiel, aber anders wird auf dem Bildschirm angezeigt
awk '{print $1,$4}' temp.txt
Nur den 1. und ausdrucken Domäne 4
awk 'BEGIN {print "NAME GRADEn----"} {print $1"t"$4}' temp.txt
gibt einen Nachrichtenkopf an, d. h. fügen Sie „NAME GRADen-------------“ vor der ersten Zeile des Eingabeinhalts hinzu und gleichzeitig wird der Inhalt durch Tabulatoren getrennt
awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp
Nachrichtenkopf und Nachrichtentrailer gleichzeitig drucken
Bedingungsoperator:
<, <=, ==, !=, >=, ~ stimmt mit regulären Ausdrücken überein, !~ stimmt nicht mit regulären Ausdrücken überein
Übereinstimmungen: awk '{if ($4~/ASIMA/) print $0}' temp bedeutet, wenn das vierte Feld ASIMA enthält, wird das gesamte gedruckt
Genaue Übereinstimmung: awk '$3==" 48" {print $0}' temp Nur den Datensatz drucken, dessen drittes Feld gleich „48“ ist
Keine Übereinstimmung: awk '$0 !~ /ASIMA/' temp Den gesamten Datensatz ohne ASIMA drucken. Die Datensätze von
sind nicht gleich: awk '$1 != "asima"' temp
sind kleiner als: awk '{if ($1<$2 ) print $1 "ist kleiner"}' temp
Set case: awk '/[Gg]reen/' temp Gibt das Ganze aus Datensatz mit Grün oder Grün
Beliebiges Zeichen: awk '$1 ~/^...a/' temp Druckt den Datensatz aus, in dem das vierte Zeichen im ersten Feld ein ist Symbol '^' stellt den Anfang der Zeile dar und entspricht '.' Stellt ein beliebiges Zeichen dar
oder relationale Übereinstimmung: awk '$0~/(abc)|(efg)/' temp Wann Bei Verwendung von | muss die Anweisung in
AND und die Beziehung eingeschlossen werden: awk '{if ( $1=="a" && $2=="b" ) print $0}' temp
ODER oder Beziehung: awk ' {if ($1=="a" || $1=="b") print $0}' temp
integrierte awk-Variable:
Beispiel: awk 'END {print NR}' temp Gibt am Ende die Anzahl der gelesenen Datensätze aus
awk '{print NF, NR, $0} END {print FILENAME} ' temp
awk '{if (NR>0 && $4~/Brown/) print $0}' temp Es gibt mindestens einen Datensatz, der Brown enthält
Eine andere Verwendung von NF: echo $PWD -F/ '{print $NF}' Zeigt den aktuellen Verzeichnisnamen an
Ausführungsmodus: awk 'Bedingungstyp 1{Aktion 1} Bedingungstyp 2{Aktion 2} ...' Dateiname
# last |. awk '{print $1 "t" $3}' <== Zeigt die Anmeldedaten an, zeigt nur den Anmeldenamen und die IP-Adresse an, getrennt durch [Tab] Die integrierten Variablen von awk stellen die Bedeutung dar
NF Die Gesamtzahl der Felder in jeder Zeile ($0)
NR Die „Anzahl der Zeilen“ der Daten, die awk derzeit verarbeitet
FS gibt das Trennzeichen an, der Standardwert ist eine Leertaste