- Was ist der Unterschied zwischen awk und sed?
- Welche Art von Anwendung sind die besten Anwendungsfälle für sed- und awk-Tools?
Antworten:
sed
ist ein Stream-Editor. Es arbeitet mit Zeichenströmen pro Zeile. Es verfügt über eine primitive Programmiersprache, die Schleifen im Goto-Stil und einfache Bedingungen enthält (zusätzlich zum Muster- und Adressabgleich). Es gibt im Wesentlichen nur zwei "Variablen": Musterraum und Halteraum. Die Lesbarkeit von Skripten kann schwierig sein. Mathematische Operationen sind bestenfalls außerordentlich umständlich.
Es gibt verschiedene Versionen von sed
mit unterschiedlichen Unterstützungsstufen für Befehlszeilenoptionen und Sprachfunktionen.
awk
ist zeilenweise auf begrenzte Felder ausgerichtet. Es hat viele robusten Programmierkonstrukte einschließlich if
/ else
, while
, do
/ while
und for
(C-Stil und Array - Iteration). Es gibt vollständige Unterstützung für Variablen und eindimensionale assoziative Arrays sowie (IMO) kludgey mehrdimensionale Arrays. Mathematische Operationen ähneln denen in C. Sie haben printf
und funktionieren. Das "K" in "AWK" steht für " K ernighan" wie in "Kernighan and Ritchie" des Buches "C Programming Language" (nicht zu vergessen A ho und W einberger). Man könnte möglicherweise einen Detektor für akademisches Plagiat mit schreiben awk
.
GNU awk
( gawk
) verfügt über zahlreiche Erweiterungen, einschließlich echter mehrdimensionaler Arrays in der neuesten Version. Es gibt andere Variationen von awk
einschließlich mawk
und nawk
.
Beide Programme verwenden reguläre Ausdrücke zum Auswählen und Verarbeiten von Text.
Ich würde eher verwenden, sed
wo es Muster im Text gibt. Sie können beispielsweise alle negativen Zahlen in einem Text in der Form "Minuszeichen gefolgt von einer Folge von Ziffern" (z. B. "-231,45") durch das Formular "Buchhalter in Klammern" (z. B. "(231,45)" ersetzen. ) mit diesem (was Raum für Verbesserungen gibt):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Ich würde verwenden, awk
wenn der Text eher wie Zeilen und Spalten oder, wie es sich awk
bezieht, "Datensätze" und "Felder" aussieht . Wenn ich eine ähnliche Operation wie oben ausführen würde, aber nur im dritten Feld einer einfachen, durch Kommas getrennten Datei, könnte ich Folgendes tun:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
Natürlich sind dies nur sehr einfache Beispiele, die nicht die gesamte Bandbreite der Funktionen veranschaulichen, die jeder bietet.
1) Was ist der Unterschied zwischen awk und sed?
Beide sind Werkzeuge, die Text transformieren. ABER awk kann mehr als nur Text manipulieren. Es ist eine Programmiersprache für sich, mit den meisten Dingen, die Sie beim Programmieren lernen, wie Arrays, Schleifen, wenn / sonst Flusskontrolle usw. Sie können auch in sed "programmieren", aber Sie möchten den darin geschriebenen Code nicht beibehalten .
2) Welche Art von Anwendung sind die besten Anwendungsfälle für sed- und awk-Tools?
Fazit: Verwenden Sie sed für eine sehr einfache Textanalyse. Alles darüber hinaus ist awk besser. In der Tat können Sie sed ganz wegwerfen und nur awk verwenden. Da sich ihre Funktionen überschneiden und awk mehr kann, verwenden Sie einfach awk. Sie werden auch Ihre Lernkurve reduzieren.
sed
, 's/search/replace'
ist viel einfacher zu tippen als awk
die Syntax und ist das, was Sie die meiste Zeit brauchen.
Beide Werkzeuge sollen mit Text arbeiten und es gibt Aufgaben, für die beide Werkzeuge verwendet werden können.
Für mich lautet die Regel zum Trennen: Verwenden Sie sed
diese Option, um Aufgaben zu automatisieren, die Sie sonst in einem Texteditor manuell ausführen würden. Deshalb wird es Stream- Editor genannt . (Sie können dieselben Befehle verwenden, um Text in vim zu bearbeiten.) Verwenden awk
Sie diese Option, wenn Sie Text analysieren, dh Felder zählen, Summen berechnen, Strukturen extrahieren und neu organisieren möchten usw.
Auch sollten Sie nicht vergessen grep
. Verwenden grep
Sie diese Option, wenn Sie nur etwas in einem Text (einer Datei) suchen / extrahieren möchten.