Praxisleitfaden für den Linux-Befehl awk

Übersicht

In Linux-Umgebungen ist awk das mächtigste Werkzeug, um große Textdateien oder Protokolldaten effizient zu verarbeiten und zu filtern. In diesem Leitfaden lernen Sie die grundlegende Syntax sowie praktische Anwendungsfälle kennen, mit denen Sie ohne komplexe Skripte und mit nur einem einzigen Einzeiler bestimmte Spalten extrahieren, Bedingungen filtern und Daten aggregieren können.

1. Grundlegendes Funktionsprinzip von awk und Extrahieren bestimmter Spalten

Um den awk-Befehl zu testen, erstellen wir eine Beispiel-Textdatei, in der Benutzername, ID und Berufsbezeichnung durch Leerzeichen getrennt sind.

cat « ‘EOF’ > sample_users.txt
user1 1001 Developer
user2 1002 Designer
user3 1003 Manager
EOF

Mit dem Befehl awk extrahieren und geben wir aus jeder Zeile der Datei das erste Feld ($1, Benutzername) und das dritte Feld ($3, Beruf) aus, wobei standardmäßig Leerzeichen als Trennzeichen verwendet werden.
Sofern kein anderes Trennzeichen angegeben wird, teilt awk Felder standardmäßig anhand aufeinanderfolgender Leerzeichen oder Tabulatoren auf.
⚙️ [Wichtige Optionen]

-F fs : Legt das Eingabefeld-Trennzeichen (Field Separator) fest.
-v var=val : Weist vor der Ausführung eine Variable und deren Anfangswert zu, die innerhalb des awk-Skripts verwendet werden können.
-f progfile : Gibt den Pfad zu einer Datei an, die den auszuführenden awk-Skriptcode enthält.

awk ‘{print $1, $3}’ sample_users.txt

In der durch Doppelpunkte (:) getrennten Datei /etc/passwd wird mit der Option -F: das Trennzeichen festgelegt. Anschließend extrahieren wir nur das erste Feld ($1, Kontoname) und das sechste Feld ($6, Pfad des Home-Verzeichnisses) und überprüfen die ersten 5 Zeilen.

awk -F: ‘{print $1, $6}’ /etc/passwd | head -n 5

2. Benutzerdefinierte Datenfilterung mit Bedingungen und Operatoren

Wir erstellen die Übungsdatei server_resources.txt, die Daten zur CPU- und Speicherauslastung einzelner Server enthält.

cat « ‘EOF’ > server_resources.txt
web-server 85 92
db-server 45 60
cache-server 92 40
backup-server 20 15
EOF

Über einen Bedingungsausdruck filtern wir Einträge heraus, bei denen das zweite Feld ($2, CPU-Auslastung) 80 % oder mehr beträgt, und geben den entsprechenden Servernamen zusammen mit einer Warnmeldung aus.
Dies ist äußerst nützlich, um Systemressourcen zu identifizieren, die Schwellenwerte überschreiten.

awk ‘$2 >= 80 {print $1 " CPU 경고: " $2 “%”}’ server_resources.txt

Mit dem logischen UND-Operator (&&) filtern wir kritische Server heraus, bei denen sowohl die CPU- ($2) als auch die Speicherauslastung ($3) mindestens 80 % erreichen.
Durch kombinierte Bedingungen lassen sich gezielt Systeme identifizieren, bei denen mehrere Ressourcen gleichzeitig den Grenzwert überschreiten.

awk ‘$2 >= 80 && $3 >= 80 {print “위험 서버: " $1}’ server_resources.txt

3. Statistiken und Summierung mit integrierten Variablen sowie BEGIN/END-Blöcken

Um Datenaggregationen und statistische Berechnungen mit awk zu demonstrieren, erstellen wir die Beispieldatei sales_data.txt mit Artikelnamen und Verkaufszahlen.

cat « ‘EOF’ > sales_data.txt
Apple 5000
Banana 3000
Orange 4500
Grape 8000
EOF

Über den BEGIN-Block wird vor der Verarbeitung des Dateiinhalts eine Einleitungszeile ausgegeben, und der Wert des zweiten Feldes ($2) jeder Zeile wird in der Variable sum aufsummiert.
Im END-Block, der nach der Verarbeitung aller Zeilen ausgeführt wird, werden der Gesamtumsatz sowie der durchschnittliche Umsatz mithilfe der integrierten Variable NR (Gesamtzahl der Datensätze) berechnet und ausgegeben.

awk ‘BEGIN {print “— 매출 집계 시작 —”} {sum += $2; print $1 “: " $2} END {print “——————-”; print “총 매출: " sum “원”; print “평균 매출: " sum/NR “원”}’ sales_data.txt

4. Analyse von Webserver-Logs und Filtern von auffälligem Datenverkehr in der Praxis

Zur Analyse von Webserver-Logs und zur Fehlersuche erstellen wir die Beispieldatei access.log im Nginx- bzw. Apache-Standardformat.

cat « ‘EOF’ > access.log
192.168.1.10 - - [10/Oct/2026:10:00:01] “GET /index.html” 200 4502
192.168.1.11 - - [10/Oct/2026:10:00:02] “POST /login” 401 1024
192.168.1.12 - - [10/Oct/2026:10:00:03] “GET /api/data” 500 2048
192.168.1.10 - - [10/Oct/2026:10:00:04] “GET /dashboard” 200 8920
192.168.1.13 - - [10/Oct/2026:10:00:05] “POST /login” 401 1024
EOF

Mit dem Regex-Matching-Operator (~) filtern wir Zeilen mit 4xx-Clientfehlern und 5xx-Serverfehlern heraus, bei denen das neunte Feld ($9, HTTP-Statuscode) mit einer 4 oder 5 beginnt.
Aus den übereinstimmenden Logzeilen werden nur die Client-IP ($1), die angeforderte URI ($7) und der Statuscode ($9) extrahiert, um Störungen und auffälligen Datenverkehr schnell zu erkennen.

awk ‘$9 ~ /^[45]/ {print $1, $7, $9}’ access.log

Mithilfe assoziativer Arrays in awk (ip[$1]++) wird die Anzahl der Anfragen pro IP-Adresse gezählt. Anschließend wird die Gesamtzahl über eine Schleife im END-Block ausgegeben und mit der Pipeline sort -rn absteigend nach Anfragehäufigkeit sortiert.
Dies ist eine praxiserprobte Analysemethode, um übermäßigen Traffic oder verdächtige Zugriffsversuche von bestimmten IP-Adressen zu erkennen.

awk ‘{ip[$1]++} END {for (i in ip) print ip[i], i}’ access.log | sort -rn

In diesem Leitfaden haben wir die grundlegende Syntax sowie praxisnahe Schlüsselbeispiele des awk-Befehls kennengelernt, mit denen sich Textverarbeitung und die Analyse großer Logdateien unter Linux mühelos bewältigen lassen.
Wenden Sie die vorgestellten Optionen und Muster direkt in Ihren täglichen Aufgaben an, um wiederkehrende Datenextraktions- und Verarbeitungsschritte noch effizienter zu automatisieren.