WMP Sites

AWK: Das vielseitige Werkzeug zur Datenverarbeitung

Lukas Fuchs vor 2 Jahren DevOps & Deployment 3 Min. Lesezeit

Was ist AWK?

AWK ist eine vielseitige Programmiersprache, die speziell für die Verarbeitung von strukturierten Daten konzipiert wurde. Sie wurde von Alfred Aho, Peter Weinberger und Brian Kernighan in den 1970er Jahren entwickelt und ist eine Abkürzung für ihre Initialen.

Eigenschaften von AWK

  • Musterabgleich: AWK ist für seine leistungsstarken Musterabgleichsoperatoren bekannt, die es dir ermöglichen, bestimmte Textmuster in Daten zu identifizieren.
  • Feldbasierte Datenverarbeitung: AWK behandelt Daten als Felder, die durch Trennzeichen wie Leerzeichen oder Kommas getrennt sind. Dies vereinfacht die Manipulation und Analyse von strukturierten Daten wie CSV-Dateien.
  • Portabilität: AWK ist eine plattformübergreifende Sprache, die auf verschiedenen Betriebssystemen wie Linux, macOS und Windows ausgeführt werden kann.
  • Unix-ähnliche Syntax: AWK hat eine benutzerfreundliche Syntax, die der Bourne-Shell ähnelt, was es für Benutzer von Unix-ähnlichen Systemen intuitiv macht.
  • Erweiterbarkeit: AWK-Skripte können durch benutzerdefinierte Funktionen und Bibliotheken erweitert werden, wodurch sie für komplexe Datenverarbeitungsaufgaben geeignet sind.

Anwendungen von AWK

AWK wird in einer Vielzahl von Anwendungen eingesetzt, darunter:

  • Datenextraktion und -formatierung: Extrahieren bestimmter Informationen aus Textdateien oder Datenbanken.
  • Textverarbeitung: Suchen und Ersetzen von Textmustern, Entfernen von Leerzeichen oder Konvertieren von Formaten.
  • Statistische Analyse: Durchführen einfacher Berechnungen und Zusammenfassungen von Daten.
  • Systemüberwachung und Berichterstellung: Überwachen von Systemprotokollen und Erstellen von benutzerdefinierten Berichten.
  • Automatisierungsaufgaben: Automatisieren sich wiederholender Aufgaben wie dem Parsen von Daten oder dem Generieren von Konfigurationsdateien.

AWK-Skripte erstellen und ausführen

Um die Leistungsfähigkeit von AWK zu nutzen, musst du AWK-Skripte erstellen. Ein AWK-Skript ist ein Textdokument, das eine Reihe von AWK-Anweisungen enthält.

Skripterstellung

Um ein AWK-Skript zu erstellen, kannst du einen Texteditor deiner Wahl verwenden. Öffne eine neue Datei und speichere sie mit der Erweiterung .awk.

Skriptausführung

Es gibt mehrere Möglichkeiten, ein AWK-Skript auszuführen:

  • Interaktiv: Du kannst AWK interaktiv über die Befehlszeile ausführen, indem du den Befehl awk 'Befehle' eingibst, wobei Befehle die AWK-Anweisungen sind, die du ausführen möchtest.
  • Skriptdatei: Du kannst auch ein AWK-Skript aus einer Datei ausführen, indem du awk -f Skriptname Eingabedatei eingibst, wobei Skriptname der Name des AWK-Skripts und Eingabedatei die zu verarbeitende Datei ist.
  • Überleitung von Standard-Eingabe: Wenn keine Eingabedatei angegeben wird, liest AWK die Eingabe von der Standard-Eingabe, was nützlich ist, wenn Daten über Pipelines übergeben werden.

Beispiel

Das folgende AWK-Skript druckt die zweite Spalte der Eingabedatei:

#!/usr/bin/awk -f
{ print $2 }

Um dieses Skript auszuführen, kannst du es als zweite_spalte.awk speichern und dann ausführen:

awk -f zweite_spalte.awk eingabe.txt

Daten lesen und verarbeiten

AWK bietet vielseitige Möglichkeiten zum Lesen und Verarbeiten von Daten. Es kann Daten aus verschiedenen Quellen einlesen, darunter:

Aus Dateien lesen

# datei.txt einlesen
BEGIN { FS="," }
{ print $1, $2 }

Aus der Standardeingabe lesen

# Daten von der Standardeingabe lesen
{ print $1, $2 }

Aus Befehlen lesen

# Ausgabe des "ls" Befehls verarbeiten
BEGIN { print "Dateien und Verzeichnisse:" }
"ls -l" | getline; { print $5, $9 }

Verarbeitungsmöglichkeiten

Nach dem Einlesen von Daten kannst du sie mit AWK auf verschiedene Arten verarbeiten:

  • Filtern: Daten nach bestimmten Kriterien filtern (z. B. Zeilen mit einem bestimmten Wert in Spalte 3).
{ if ($3 == "Wert") print }
  • Sortierte: Daten nach einem oder mehreren Feldern sortieren.
{ print $1, $2 | "sort -nr" }
  • Zusammenfassung: Daten zusammenfassen, indem du Aggregationsfunktionen wie Summe, Durchschnitt und Maximum verwendest.
{ sum += $3 }
END { print "Summe: ", sum }
  • Transformation: Daten transformieren, indem du mathematische Operationen, Datumsmanipulation oder String-Verarbeitung verwendest.

Eingebaute Variablen

AWK stellt folgende eingebaute Variablen zur Verfügung, die dir beim Lesen und Verarbeiten von Daten helfen:

  • FS: Trennzeichen für Felder (Standard: Leerzeichen)
  • RS: Trennzeichen für Datensätze (Standard: Zeilenumbruch)
  • OFS: Trennzeichen für Ausgabefelder (Standard: Leerzeichen)
  • ORS: Trennzeichen für Datensätze in der Ausgabe (Standard: Zeilenumbruch)

Textverarbeitung mit AWK

AWK ist ein Meister der Textverarbeitung. Mit seinen leistungsstarken String-Funktionen kannst du komplexe Textmanipulationen mühelos durchführen.

Substitutionen und Musterabgleiche

Verwende die gsub-Funktion, um alle Übereinstimmungen eines regulären Ausdrucks in einem String durch einen Ersatzstring zu ersetzen. Alternativ kannst du sub verwenden, um nur die erste Übereinstimmung zu ersetzen. Mit der match-Funktion kannst du nach einem Muster suchen und die Position der Übereinstimmung ermitteln.

Formattierung und Ausgabe

AWK bietet eine Vielzahl von Funktionen zur Formatierung von Strings. Verwende printf für eine präzise Kontrolle über das Ausgabeformat, sprintf zum Speichern des formatierten Strings in einer Variablen und strftime zum Formatieren von Datumsangaben.

Zeilenmanipulation

Mit AWK kannst du Zeilen ganz einfach ändern, hinzufügen oder löschen. Die split-Funktion teilt eine Zeile in ein Array auf, während join ein Array wieder zu einem String zusammenfügt. delete entfernt Zeilen aus einem Kontext.

Skript-Integration

Kombinieren AWK-Skripte mit anderen Programmen, um die Textverarbeitung zu automatisieren. Verwende die Eingabeaufforderung von AWK, um Daten von anderen Befehlen zu empfangen, oder leite die Ausgabe von AWK an andere Programme weiter.

Anwendungen

AWK eignet sich hervorragend zum Bereinigen und Formatieren von Textdaten, zum Extrahieren von Informationen aus Dokumenten und zum Generieren von Berichten. Popularität erlangte es insbesondere in der bioinformatischen Datenanalyse und der Webentwicklung.

Mathematische Operationen und Datumsmanipulation

AWK bietet eine Vielzahl von Möglichkeiten zur Durchführung mathematischer Operationen und zur Manipulation von Datumsangaben.

Mathematische Operationen

Du kannst die üblichen arithmetischen Operatoren (+, -, *, /, %) verwenden. AWK bietet außerdem Funktionen wie sqrt(), exp(), log() und sin().

BEGIN {
  # Summe berechnen
  sum = 1 + 2 + 3
  # Quadratwurzel berechnen
  root = sqrt(9)
  # Exponentialfunktion berechnen
  exp = exp(1)
}

Datumsmanipulation

Mit AWK kannst du Datumsangaben erstellen, formatieren und konvertieren. Die Funktion strftime() formatiert ein Datum als Zeichenfolge, während strptime() eine Zeichenfolge in ein Datum konvertiert.

BEGIN {
  # Aktuelles Datum und Uhrzeit abrufen
  date = strftime("%Y-%m-%d %H:%M:%S")
  # Datum in eine Unix-Zeitstempel konvertieren
  timestamp = strptime(date, "%Y-%m-%d %H:%M:%S")
  # Datumsangaben hinzufügen
  new_date = date + " 1 day"
}

Beispiele

Hier sind einige Beispiele für die Verwendung von AWK für mathematische Operationen und Datumsmanipulationen:

  • Berechnung des Durchschnitts von Zahlen: awk '{ sum += $1; count++ } END { print sum / count }' filename
  • Konvertierung eines Datums in ein anderes Format: awk '{ print strftime("%d/%m/%Y", strptime($1, "%Y-%m-%d")) }' filename
  • Berechnung der Zeitdifferenz zwischen zwei Datumsangaben: awk '{ print strftime("%H:%M:%S", strptime($2, "%Y-%m-%d %H:%M:%S") - strptime($1, "%Y-%m-%d %H:%M:%S")) }' filename

AWK-Funktionen und Arrays

Funktionen

AWK bietet eine Vielzahl von integrierten Funktionen, die dir bei der Datenverarbeitung helfen. Diese Funktionen können für verschiedene Zwecke verwendet werden, darunter:

  • String-Bearbeitung: length(), substr(), match(), replace()
  • Numerische Operationen: sqrt(), log(), sin(), cos()
  • Datumsmanipulation: mktime(), strftime()
  • Systembefehle aufrufen: system(), getline()

Du kannst auch eigene Funktionen definieren, um benutzerdefinierte Operationen oder Verarbeitungslogik zu erstellen.

Arrays

AWK unterstützt assoziative Arrays, mit denen du Datenpaare unter eindeutigen Schlüsseln speichern kannst. Du kannst Array-Elemente mit der Syntax array[key] erstellen und darauf zugreifen.

Arrays sind hilfreich für:

  • Daten speichern und organisieren: Du kannst verwandte Datenelemente unter einem einzigen Schlüssel gruppieren.
  • Datenstrukturen wie Tabellen und Listen implementieren: Du kannst verschachtelte Arrays verwenden, um komplexe Datenstrukturen zu modellieren.
  • Häufig verwendete Daten zwischenspeichern: Dies kann die Leistung verbessern, indem mehrmalige Berechnungen vermieden werden.

Hinweis: Arrays werden in AWK dynamisch erstellt, d. h. du musst sie nicht vorab deklarieren.

Fehlerbehandlung und Debugging

Beim Schreiben von AWK-Skripten kannst du leicht Fehler machen, wie z. B. Tippfehler oder logische Fehler. Um diese Fehler zu beheben und dein Skript zu debuggen, bietet AWK verschiedene Optionen:

Syntaxüberprüfung

Wenn du dein Skript erstellst, kannst du die Syntax mit dem -f-Flag überprüfen. Dies prüft dein Skript auf Syntaxfehler und gibt eine Fehlermeldung aus, falls vorhanden:

awk -f mein_skript.awk

Druckoptionen

Die Druckoptionen -v und -d können hilfreich sein, um den Debug-Prozess zu unterstützen:

  • -v: Zeigt den Wert von Variablen an, wenn AWK beendet wird.
  • -d: Aktiviert den Debugging-Modus, der zusätzliche Informationen zu den ausgeführten Anweisungen und Variablenwerten ausgibt.

Fehlerbehandlung

AWK stellt die globale Variable ERRNO bereit, die den Fehlercode des zuletzt aufgetretenen Fehlers enthält. Du kannst diese Variable überprüfen, um den Fehlertyp zu bestimmen. Beispielsweise:

if (ERRNO) {
    print "Fehler aufgetreten: " ERRNO
    exit 1  # Skript beenden
}

Debugging-Tools

Zusätzlich zu den integrierten Funktionen von AWK kannst du auch externe Debugging-Tools wie gdb oder ddd verwenden. Diese Tools ermöglichen es dir, Haltepunkte zu setzen, den Programmablauf schrittweise zu verfolgen und den Wert von Variablen zu überprüfen.

Tipps zum Debuggen

Hier sind einige Tipps zum Debuggen von AWK-Skripten:

  • Überprüfe dein Skript sorgfältig auf Tippfehler.
  • Teile dein Skript in kleinere Abschnitte auf und debugg sie einzeln.
  • Verwende Druckanweisungen, um den Wert von Variablen an verschiedenen Stellen im Skript zu überprüfen.
  • Protokolliere Fehlermeldungen in eine Datei, um sie später zu analysieren.
  • Bitte andere, dein Skript zu überprüfen und Feedback zu geben.

Denke daran, dass Fehlerbehandlung und Debugging ein wesentlicher Bestandteil des Schreibens von AWK-Skripten sind. Durch die Verwendung der bereitgestellten Tools und das Befolgen dieser Tipps kannst du Fehler effektiv beheben und sicherstellen, dass dein Skript wie erwartet funktioniert.

AWK mit anderen Programmen kombinieren

AWK ist ein vielseitiges Werkzeug, das nicht nur als eigenständiges Programm verwendet werden kann, sondern auch nahtlos mit anderen Programmen integriert werden kann. Dies ermöglicht dir, die Funktionalität von AWK zu erweitern und komplexe Aufgaben zu automatisieren.

Eingabedaten aus anderen Programmen lesen

Du kannst AWK dazu verwenden, Eingabedaten aus anderen Programmen zu lesen, indem du diese über eine Pipe an AWK weiterleitest. Dies ist nützlich, wenn du die Ausgabe eines anderen Programms verarbeiten oder filtern möchtest.

$ command1 | awk '{ ... }'

Ausgaben an andere Programme weiterleiten

Umgekehrt kannst du auch die Ausgabe deines AWK-Skripts an andere Programme weiterleiten. Dies ermöglicht es dir, die Ergebnisse von AWK in anderen Anwendungen zu verwenden oder weiterzuverarbeiten.

$ awk '{ ... }' | command2

Kombination mit Shell-Skripten

AWK kann effektiv mit Shell-Skripten kombiniert werden, um leistungsstarke Automatisierungslösungen zu erstellen. Du kannst AWK-Skripte innerhalb von Shell-Skripten ausführen oder umgekehrt.

#!/bin/bash

# AWK-Skript
awk '{ ... }' < input.txt

# Shell-Befehl
echo "Verarbeitung abgeschlossen."

Integration mit Datenbanken

AWK kann auch mit Datenbanken integriert werden, um Daten aus Datenbanktabellen zu extrahieren, zu verarbeiten und in andere Formate zu konvertieren. Hierfür kannst du entweder die integrierte SQL-Funktionalität von AWK verwenden oder externe Tools wie awk2sql einsetzen.

$ awk -f awk_script.awk db_connection

Verwendung von AWK-Funktionen in anderen Programmen

Einige Programmiersprachen, wie Perl und Python, ermöglichen es dir, AWK-Funktionen direkt in deinen Code zu integrieren. Dies kann die Datenverarbeitungsfunktionen deiner Programme erheblich erweitern. In Python kannst du beispielsweise das Modul awk verwenden:

import awk

# AWK-Skript als String
awk_script = "{ ... }"

# AWK-Funktion aufrufen
result = awk.run(awk_script, input_data)

Anwendungen und Beispiele für AWK

AWK ist ein vielseitiges Werkzeug für verschiedene Datenverarbeitungsaufgaben. Hier sind einige Anwendungsfälle und Beispiele, die seine Leistungsfähigkeit demonstrieren:

Datenextraktion und -manipulation

  • Protokolldateien analysieren: AWK kann Protokolldateien durchsuchen und bestimmte Ereignisse oder Muster identifizieren. Du kannst beispielsweise das Tool verwenden, um Fehlermeldungen in Serverprotokollen zu extrahieren oder verdächtige Aktivitäten in Sicherheitslogs zu erkennen.
  • CSV- und Excel-Dateien verarbeiten: AWK ist perfekt geeignet, um CSV- und Excel-Dateien zu bearbeiten, Daten zu extrahieren, zu filtern und in andere Formate zu konvertieren. Beispielsweise kannst du ein Tool schreiben, um bestimmte Zeilen aus einer großen Tabelle zu extrahieren oder Daten in einem benutzerdefinierten Format zu formatieren.
  • XML-Daten verarbeiten: AWK kann verwendet werden, um XML-Dokumente zu parsen, Knoten zu extrahieren und Daten zu manipulieren. Dies ist besonders nützlich, wenn du Daten aus komplexen XML-Strukturen abrufen musst, wie sie in Webservices oder Konfigurationsdateien verwendet werden.

Textverarbeitung

  • Text in Groß- oder Kleinbuchstaben konvertieren: AWK kann Text in Groß- oder Kleinbuchstaben konvertieren, was bei der Verarbeitung von Daten aus verschiedenen Quellen hilfreich sein kann.
  • Text suchen und ersetzen: Durch Verwendung von regulären Ausdrücken kannst du mit AWK Text suchen und ersetzen, um unerwünschte Zeichen zu entfernen, Daten zu bereinigen oder Text in ein anderes Format zu konvertieren.
  • Textformatierung: AWK kann verwendet werden, um Text zu formatieren, z. B. um Zeilenumbrüche hinzuzufügen, Leerzeichen zu entfernen oder Zeichenfolgen zu zentrieren. Dies ist nützlich für die Erstellung von Berichten, die Daten in einer lesbaren Form darstellen.

Mathematische Operationen und Datumsmanipulation

  • Mathematische Berechnungen durchführen: AWK kann mathematische Operationen an Zahlen ausführen, wie Addition, Subtraktion, Multiplikation und Division. Dies ist nützlich für die Durchführung einfacher statistischer Analysen oder die Berechnung von Werten aus komplexeren Datensätzen.
  • Datumsmanipulation: AWK unterstützt Datumsfunktionen, mit denen du Datumsangaben formatieren, konvertieren und Berechnungen durchführen kannst. Du kannst beispielsweise zwei Datumsangaben vergleichen, die Differenz zwischen ihnen berechnen oder Datumsangaben in einem bestimmten Format ausgeben.

Weitere Anwendungen

  • Skriptautomatisierung: AWK kann verwendet werden, um Routineaufgaben zu automatisieren, die normalerweise manuell ausgeführt würden. Beispielsweise kannst du ein Skript schreiben, um E-Mails zu senden, Dateien zu kopieren oder Systeminformationen zu sammeln.
  • Datenvalidierung: AWK kann verwendet werden, um Daten auf Fehler zu überprüfen, bestimmte Kriterien zu erfüllen oder gültige Formate zu validieren. Dies ist besonders nützlich beim Import oder der Verarbeitung von Daten aus verschiedenen Quellen.
  • Datenaggregation und -berichterstellung: AWK kann verwendet werden, um Daten aus verschiedenen Quellen zu aggregieren und Berichte in verschiedenen Formaten zu erstellen. Dies ist hilfreich für die Erstellung von zusammenfassenden Analysen, die das Verständnis großer Datenmengen erleichtern.

Weitere Beiträge

Folge uns

Neue Beiträge

Frontend

HTML Pfeile erstellen und anpassen: Richtungshinweise auf deiner Website klar und effektiv einsetzen

AUTOR • Jul 02, 2026
Frontend

HTML Code fett: Wie man Text hervorhebt und Aufmerksamkeit erregt

AUTOR • Jul 02, 2026
Frontend

Python HTML dynamische Webseiten einfach programmieren: So baust du interaktive Web-Projekte schnell

AUTOR • Jul 02, 2026
Frontend

HTML Slideshows erstellen: Schritt-für-Schritt-Anleitung für Anfänger

AUTOR • Jul 02, 2026
Frontend

Anleitung zum Festlegen von Schriftarten in HTML: So steuerst du Typografie sauber und effektiv

AUTOR • Jul 02, 2026
Frontend

Erstelle mühelose Grid Layouts mit einem CSS Grid Generator: Schnellere, saubere Layouts ohne Stress

AUTOR • Jul 02, 2026
API & Webservices

HTML Daten mühelos in Microsoft Excel importieren: So geht’s schnell und sauber

AUTOR • Jul 02, 2026
Frontend

de html net die definitive Anleitung für Webentwickler: So baust du schnelle, saubere Webseiten

AUTOR • Jul 02, 2026
Frontend

Deaktivieren und deaktivieren von Links im HTML: So steuerst du Klicks sauber

AUTOR • Jul 02, 2026
JavaScript

HTML in PDF in JavaScript umwandeln: So einfach geht’s wirklich

AUTOR • Jul 02, 2026
API & Webservices

HTML Parser Online: Einfach HTML-Dokumente analysieren und verarbeiten

AUTOR • Jul 02, 2026
Frontend

HTML Listen ohne Aufzählungspunkte: Der Leitfaden für saubere, professionelle Listen

AUTOR • Jul 02, 2026
Frontend

Erstellen einer fesselnden CSS Timeline für Ihre Website: So bauen Sie ein starkes visuelles Storytelling-Element

AUTOR • Jul 02, 2026
API & Webservices

HTTP 405 Method Not Allowed: Ursachen, Folgen und Lösungen für den Fehler

AUTOR • Jul 02, 2026
Frontend

Media Queries: Die Kunst, für alle Bildschirmgrößen zu entwerfen

AUTOR • Jul 02, 2026
Frontend

HTML Frames: Ein umfassender Leitfaden zur Strukturierung von Webinhalten

AUTOR • Jul 02, 2026
Frontend

Kostenloses Website Hosting mit HTML: So startest du ohne Budget und ohne Chaos

AUTOR • Jul 02, 2026
DevOps & Deployment

Kali Linux für Penetrationstester: Das ultimative Tool im Praxis-Check

AUTOR • Jul 02, 2026
DevOps & Deployment

Memes fuer Linux Enthusiasten: Die lustigen Seiten des Open Source-Alltags

AUTOR • Jul 02, 2026
DevOps & Deployment

Linux from Scratch: Baue dein eigenes Linux-Betriebssystem Schritt für Schritt

AUTOR • Jul 02, 2026

Beliebte Beiträge

Frameworks & Libraries

Effizientes Erstellen von Tabellen in LaTeX: Ein Schritt-für-Schritt Tutorial

AUTOR • Jun 16, 2025
Frontend

Die Flächenformeln für Umfang: Ein detaillierter Leitfaden

AUTOR • Sep 08, 2025
Datenbanken

Die Michaelis-Menten-Konstante: Bedeutung und Anwendung in der Biochemie

AUTOR • Apr 04, 2025
Frameworks & Libraries

Bachelorarbeit formatieren: Tipps und Tricks für eine optimale Präsentation

AUTOR • Sep 10, 2024
Frontend

Word Formatvorlagen Download - Die optimale Nutzung für Effizienz und Kreativität

AUTOR • Sep 10, 2024
Frontend

Has Kennzeichen: Was es bedeutet und wie es funktioniert

AUTOR • Jun 18, 2024
DevOps & Deployment

ADB: Das umfassende Tool zur Android-Debug-Bridge

AUTOR • May 06, 2024
DevOps & Deployment

Linux-Dienste: Die Fundamente für sichere und zuverlässige Systeme

AUTOR • May 06, 2024
DevOps & Deployment

Reise in die Welt von Linux: Ein umfassender Leitfaden für Einsteiger

AUTOR • May 06, 2024
DevOps & Deployment

AWK: Das vielseitige Werkzeug zur Datenverarbeitung

AUTOR • May 06, 2024
DevOps & Deployment

Überwachung der CPU-Temperatur unter Linux: Optimale Systemleistung sicherstellen

AUTOR • May 06, 2024
DevOps & Deployment

Tar-Entpacken: Eine Schritt-für-Schritt-Anleitung zum Extrahieren komprimierter Dateien

AUTOR • May 06, 2024
DevOps & Deployment

Installiere Linux auf Windows: Dein kompletter Schritt-für-Schritt-Leitfaden

AUTOR • May 06, 2024
DevOps & Deployment

Linux-Tastatur einfach und schnell umstellen: Eine Schritt-für-Schritt-Anleitung

AUTOR • Jan 20, 2026
DevOps & Deployment

Rocky Linux 9: Ein detaillierter Einblick in die neueste Enterprise Linux-Distribution

AUTOR • May 06, 2024
Frontend

Der HTML-Input-Typ "E-Mail" – Best Practices für die Sammlung valider E-Mail-Adressen

AUTOR • Apr 24, 2024
Frontend

HTML Lang Deutsch: Sprachattribute für barrierefreie Websites

AUTOR • Apr 24, 2024
Frontend

HTML-Codeprüfung: Finden und Beheben von Fehlern für eine perfekte Website

AUTOR • Apr 24, 2024
Frontend

HTML onload: Ein Leitfaden zur Ausführung von Code nach dem Laden der Seite

AUTOR • Apr 24, 2024
Frontend

HTML Monospace: Ein umfassender Leitfaden für die Verwendung von nicht proportionalen Schriftarten

AUTOR • Apr 24, 2024