Ein Spickzettel für den awk-Befehl, der in der Bash-Befehlszeilensprache unter Linux läuft. Stellt alles vor, von einfachen Referenzen bis zu fortgeschrittenen Themen wie externer Befehlsausführung.
Beachten Sie, dass die Konzepte von Datensätzen und Spalten dieselben sind wie in Excel-Tabellen.
- Datensatz … Zeile. Von oben nach unten
- Spalte … Spalte. Von links nach rechts
Beachten Sie, dass awk die folgenden vorbereiteten Variablen hat:
- FS Trennzeichen (Standard ist Leerzeichen)
- NF Gesamtzahl der Spalten
- NR Gesamtzahl der Datensätze
- $1 erste Spalte
- $2 zweite Spalte
Zeilen ausgeben, die mit grep -E mit Regex übereinstimmen
Das Folgende ist ein Beispiel für die Ausgabe von Zeilen, die mit einem Regex mit grep -E übereinstimmen.
awk '/regex/'
Zeilen ausgeben, bei denen die erste Spalte mit Regex übereinstimmt
Das folgende Beispiel gibt Zeilen aus, bei denen die erste Spalte mit dem Regex übereinstimmt.
awk '{if ($1 ~ /regex/){print $1,$2,$3,$4}}'
Das Folgende gibt Zeilen aus, bei denen die erste Spalte mit dem Regex übereinstimmt, aus der Ausgabe des df-Befehls.
df | awk '{if ($1 ~ /\w{1,2}:/){print $1,$2,$3}}'
Python ausführen / Externe Befehle ausführen
Das Folgende ist ein Beispiel für die Multiplikation des Werts in der vierten Spalte mit 100 unter Verwendung von Python.
awk '{"python -c \"print("$4"*100)\" | perl -pe 'chomp'" |& getline $11 ; print "The 4th column was being x100:"$11 }}'
Das folgende Beispiel multipliziert den Wert in der vierten Spalte mit 100 unter Verwendung von Python.
$ df 2>/dev/null | tail -3
E: 2930133932 381876300 2548257632 14% /mnt/e
G: 2930133932 1545875952 1384257980 53% /mnt/g
H: 2930134012 2625853000 304281012 90% /mnt/h
$ df 2>/dev/null | tail -3 | awk '{if ($1 ~ /\w{1}:/){"python -c \"print("$4"/1000/1000)\" | perl -pe 'chomp'" |& getline $11 ; print $1,$11"(GB)",$5,$6}}'
E: 2548(GB) 14% /mnt/e
G: 1384(GB) 53% /mnt/g
H: 304(GB) 90% /mnt/h
Wichtige Punkte hier:
- Beim Übergeben von
$1usw. als Argumente an Befehle nicht in""einschließen. - Die meisten Ausgaben enthalten
\nZeilenumbruch, also mit perl usw. chomp verwenden. - Mit
|& getline $11können Sie die Befehlsausgabe$11zuweisen. Ohne dies wird es als$0(?) verarbeitet, und die Ausgabe wird am Anfang der Spalten als 0. Spalte eingefügt. - Bei der Zuweisungsverarbeitung kann
system()nicht (?) verwendet werden
awk - Assigning system command’s output to variable - Stack Overflow
Alle übereinstimmenden Prozesse beenden
Der folgende Befehl beendet Prozesse, die npm enthalten, und gibt das Ausführungsergebnis aus.
ps aux | grep "npm" | awk '{"kill -9 "$2 |& getline $11 ; print $11}'
Das Folgende ist funktionalisiert:
# killp(){
# ps aux | grep "$1" | awk '{"kill -9 "\\$2 |& getline \\$11 ; print \\$11}'
# }
killp(){
ps aux | grep "$1" | awk '{"kill -9 "$2 |& getline $11 ; print $11}'
}
Alle übereinstimmenden Hintergrundprozesse beenden
Der folgende Befehl beendet diejenigen, die webpack-dev enthalten.
ps S | awk '/webpack-dev/' | awk '{"kill -9 "$1 |& getline $11 ; print $11}'
Bitte beziehen Sie sich auch auf diese: