Detaillierte Erklärung des Befehls awk
Einfache Verwendung:
awk: Operationen für jede Zeile einer Datei ausführen.
awk -F: '{print $1,$4}': Verwenden Sie ':', um diese Zeile zu teilen und das erste und vierte Feld dieser Zeile auszudrucken.
Detaillierte Einführung:
AWK-Befehlseinführung
Die grundlegendste Funktion der AWK-Sprache ist Durchsuchen und Extrahieren von Informationen basierend auf angegebenen Regeln in Dateien oder Zeichenfolgen. Erst nachdem awk Informationen extrahiert hat, können andere Textoperationen normalerweise zum Formatieren von Informationen in Textdateien verwendet werden
1. Rufen Sie awk auf:
Die erste Befehlszeilenmethode, wie zum Beispiel:
awk [-Field-separator] 'commands' input- Datei(en)
Die Befehle hier sind die echten awk-Befehle, [-F Domänentrennzeichen] ist optional, awk verwendet standardmäßig Leerzeichen zur Trennung, wenn Sie also durchsuchen möchten, gibt es sie Leerzeichen zwischen Domänen Es ist nicht notwendig, diese Option anzugeben, aber wenn Sie eine Datei wie passwd durchsuchen und jedes Feld dieser Datei einen Doppelpunkt als Trennzeichen verwendet, müssen Sie die Option -F verwenden: awk -F : 'commands' Eingabedatei
Zweitens fügen Sie alle awk-Befehle in eine Datei ein, machen das awk-Programm ausführbar und verwenden dann den awk-Befehlsinterpreter als erste Zeile des Skripts, damit Sie ihn aufrufen können Geben Sie dazu den Skriptnamen
ein. Drittens fügen Sie alle awk-Befehle in eine separate Datei ein und rufen dann Folgendes auf:
awk -f awk-script-file input-file
-f Option gibt das awk-Skript in der Datei awk-script-file an, input-file ist der Dateiname, der mit awk
2. awk-Skript: Das awk-Skript besteht aus verschiedenen Operationen und Modi. Der Standardwert ist ein Leerzeichen . Der gelesene Inhalt wird der Reihe nach in das entsprechende Feld eingefügt. Lesen Sie den Datensatz bis zum Ende der Datei auf 2.1 Jede awk-Anweisung besteht aus Modi und Aktionen. In einem awk-Skript können viele Anweisungen enthalten sein. Der Modusteil bestimmt, wann Aktionsanweisungen ausgelöst werden und Ereignisse auslösen. Aktionen sind Operationen an Daten. Wenn der Musterteil weggelassen wird, bleibt die Aktion jederzeit in Ausführung. Das Muster kann eine beliebige bedingte Anweisung oder zusammengesetzte Anweisung oder ein regulärer Ausdruck sein enthält zwei spezielle Felder BEGIN und END. Verwenden Sie die BEGIN-Anweisung, um die Anzahl und den Druckkopf festzulegen. Die BEGIN-Anweisung wird vor jeder Text-Browsing-Aktion verwendet, und dann wird die Text-Browsing-Aktion basierend auf der END-Anweisung ausgeführt Um die Gesamtzahl der Texte auszudrucken, nachdem awk die Aktion zum Durchsuchen von Texten abgeschlossen hat, müssen die Aktionen in {} eingeschlossen werden. Die tatsächliche Aktion wird in geschweiften Klammern {} angegeben. Dies wird häufig zum Drucken von Aktionen verwendet, es gibt jedoch auch längere Codes wie if- und Schleifenanweisungen und Schleifenausgänge usw. Wenn Sie nicht angeben, welche Aktion ausgeführt werden soll, druckt awk standardmäßig alle durchsuchten Datensätze aus 2.2. Domänen und Datensätze: Wenn awk ausgeführt wird, sind seine Browsing-Tags $1, $2...$n. Diese Methode wird als Domänen-Tagging bezeichnet. Verwenden Sie $1 und $3, um auf das erste und dritte Feld zu verweisen. Beachten Sie, dass Kommas zur Trennung 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|tee 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.txtbedeutet, einen Nachrichtenkopf einzugeben, d. h. „NAME GRADEn-------------“ vor der ersten Zeile des Eingabeinhalts hinzuzufügen und den Inhalt durch Tabulatoren zu trennen awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp Kopfzeile und Trailer gleichzeitig drucken 2.3. Bedingte Operatoren: =, ~ entspricht regulären Ausdrücken ,!~ Entspricht nicht dem regulären Ausdruck Entspricht: awk '{if ($4~/ASIMA/) print $0}' temp bedeutet, wenn das vierte Feld ASIMA enthält, wird das Ganze gedruckt Zeile Genaue Übereinstimmung: awk '$3=="48" {print $0}' temp Nur Datensätze drucken, deren drittes Feld gleich „48“ ist Nicht übereinstimmend: awk '$0 !~ /ASIMA/' temp Druckt den gesamten Datensatz aus, der ASIMA nicht enthält Nicht gleich: awk '$1 != "asima"' Temperatur
Kleiner als: awk '{if ($1
Set case: awk '/[Gg]reen/' temp Drucken Sie den gesamten Datensatz, der Grün enthält, oder Grün
Beliebiges Zeichen: awk '$1 ~/^...a/' temp Drucken Sie das vierte Zeichen im ersten Feld aus, das ein Datensatz ist Das Symbol „^“ steht für den Zeilenanfang und „.“ für ein beliebiges Zeichen
oder eine relationale Übereinstimmung: awk '$0~/(abc)|(efg)/' temp Verwendung |. Wann muss die Anweisung in Klammern eingeschlossen werden
AND-Beziehung: awk '{if ( $1=="a" && $2=="b" ) print $0}' temp
ODER: awk '{if ($1=="a" || $1=="b") print $0}' temp
2.4 . Integrierte awk-Variablen:
Beispiel: awk 'END {print NR}' temp Gibt die Anzahl der gelesenen Datensätze am Ende aus
awk '{print NF, NR, $0} END {print FILENAME}' temp
awk '{if (NR>0 && $4~/Brown/) print $0}' temp Mindestens ein Datensatz existiert und enthält Brown
Eine andere Verwendung von NF: echo $PWD -F/ '{print $NF}' Zeigt den aktuellen Verzeichnisnamen an
2.5. awk-Operatoren:
Mithilfe von Operatoren in awk können grundlegende Ausdrücke in numerische Typen, Zeichenfolgentypen, Variablentypen und Felder unterteilt werden und arrays Element
setzt das Eingabefeld auf den Variablennamen:
awk '{name=$1;six=$3; if (six =="man ") print name " is " six}' temp
Domänenwert-Vergleichsoperation:
awk 'BEGIN {BASE= "27"} {if ($4
Ändern Sie den Wert des numerischen Felds: (die ursprüngliche Eingabedatei wird nicht geändert)
awk '{if ($1=="asima") $6=$6-1;print $1, $6, $7}' temp
Text ändern field:
awk '{if ($1=="asima) ($1=="desc");print $1}' temp
Nur Änderungsdatensätze anzeigen:( Nur das anzeigen, was benötigt wird, abweichend vom vorherigen Befehl, Hinweis {})
awk '{if ($1=="asima) {$1== "desc";print$1}} ' temp
Erstellen Sie ein neues Ausgabefeld:
awk '{$4=$3-$2; print $4}' temp
Statistische Spaltenwerte:
awk '(tot+=$3);END {print tot}' temp zeigt die an Inhalt jeder Spalte
awk '{(tot+=$3)};END {print tot}' temp Nur das Endergebnis anzeigen
Fügen Sie die Dateilängen hinzu:
ls -l|awk '/^[^d]/ {print $9"t"$5} {tot+=$5} END{print "totKB:" tot}'
Nur Dateinamen auflisten:
ls -l|awk '{print $9}' Normalerweise ist der Dateiname der 9 domain
2.6. Integrierte String-Funktion von awk:
gsub(r, s) Ersetzen Sie r durch s im gesamten $0
awk 'gsub(/name/,"xingming") {print $0}' temp
gsub(r, s, t) Ersetze r mit s im gesamten t
index(s, t) Gibt die erste Position der Zeichenfolge t in s zurück
awk 'BEGIN {print index("Sunny", "ny ")}' temp Gibt 4 zurück
length(s) Gibt die Länge von s zurück
match( s, r) Testet, ob s eine passende r-Zeichenfolge enthält
awk '$1=="J.Lulu" {print match($1, "u")}' temp Return 4
split(s, a, fs) Teile s in Sequenz a auf fs
awk 'BEGIN {print split("12#345# 6789",myarray,"# ")"'
Gib 3 zurück, während myarray[1]="12", myarray[2]="345", myarray[3]="6789"
sprint(fmt, exp ) Gibt den fmt-formatierten exp-Match-String zurück)
substr(s, p) Gibt den Suffixteil ab p in String s zurück
substr(s, p , n) Gibt den Suffixteil zurück, der bei p beginnt und die Länge n in der Zeichenfolge s hat
2.7 Verwendung der printf-Funktion:
Zeichenkonvertierung: echo "65" |awk '{printf "%cn",$0}' Ausgabe A
awk 'BEGIN {printf "%fn",999}' Ausgabe 999,000000
Formatierte Ausgabe: awk '{printf "%-15s %sn", $1, $3}' temp zeigt alle ersten Felder linksbündig an
2.8. Andere awk-Verwendungen:
Übergabe von Werten an eine Zeile von awk-Befehlen:
awk '{if ($5 who |. awk '{if ($1==user) print $1 " sind in " $2 ' user=$LOGNAME Verwenden von Umgebungsvariablen awk-Skriptbefehl: Verwenden Sie !/bin/awk -f am Anfang von Ohne diesen Satz das Selbst -enthaltenes Skript wird nicht ausgeführt '#' # Name: student_tot.awk # anzurufen: student_tot.awk grade.txt # druckt die Gesamt- und Durchschnittszahl der Club-Studentenpunkte aus # druckt zuerst eine Kopfzeile aus BEGIN { Drucken Sie „Studentendatum, Mitgliedsnummer, Note, Alter, maximale Punktezahl“ Drucken Sie „Name beigetreten, gewonnene Punkte verfügbar.“ „ drucken“================================== ============= ==========" } # Addieren wir die erzielten Punkte (tot+=$6); # abgeschlossene Verarbeitung Jetzt drucken wir die Gesamt- und Durchschnittspunktzahl aus ENDE { print „Gesamtpunktzahl der Clubstudenten:“ tot print „Durchschnittliche Club-Studentenpunkte:“ tot/N } 2.9 awk array: awk-Schleife Grundstruktur Für (Element im Array) print array[element] awk 'BEGIN {record="123#456#789" ;split(record, myarray, "#")} END { for (i in myarray) {print myarray[i] } } 3.0 Benutzerdefinierte Anweisungen in awk 1. Bedingte Urteilsaussage (wenn) if (Ausdruck) #if (Variable im Array) else { Statement 2} test=100; { } { Print " kein bestanden"; Format: while (Ausdruck Formel) {Anweisung} Beispiel: [chengmo@localhost nginx]# awk 'BEGIN{ total=0;
else
{Statement 3}
print „good“;
}
else
}
}'
sehr gut
Jede Befehlsanweisung kann mit einem „;“-Zeichen beendet werden.
2. Schleifenanweisungen (while, for, do)
1. while-Anweisung
i++;
}print total;
}'5050
2.for-Schleife
Die for-Schleife hat zwei Formate:
Format 1:
for (Variable im Array)
{Anweisung}
Beispiel:
[chengmo@localhost nginx]# awk 'BEGIN{
for(k in ENVIRON){
print k"="ENVIRON[k];}
}'AWKPATH=.:/usr/share/awkOLDPWD=/home/web97
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpassSELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=LANG=zh_CN.GB2312
. . . . . .
Erklärung: ENVIRON ist eine awk-Konstante und ein subtypisches Array.
Format 2:
für (Variable; Bedingung; Ausdruck)
{Anweisung}
Beispiel:
[chengmo@ localhost nginx]# awk 'BEGIN{
total=0;
for(i=0;i{
total+=i;
}
print total ;
}'
5050
3.do-Schleife
Format:
do
{statement}while( Bedingung )
Beispiel:
[chengmo@localhost nginx]# awk 'BEGIN{
total=0;
i=0;
do
{
total+=i;
i++;
}while(iprint total;
}'
5050
und höher Es handelt sich um die awk-Flusskontrollanweisung. Wie Sie an der Syntax erkennen können, ist sie dieselbe wie die C-Sprache. Mit diesen Anweisungen können viele Shell-Programme tatsächlich an awk übergeben werden, und die Leistung ist sehr schnell.
Ausführlichere Artikel zum Thema awk-Befehle finden Sie auf der chinesischen PHP-Website!