584 Stimmen

Was ist der Unterschied zwischen sed und awk?

  • Was ist der Unterschied zwischen awk und sed?
  • Für welche Art von Anwendung sind die für sed- und awk-Werkzeuge?

658voto

Dennis Williamson Punkte 322329

sed ist ein Stream-Editor. Er arbeitet mit Zeichenströmen auf einer zeilenweisen Basis. Er verfügt über eine primitive Programmiersprache, die Schleifen im Stil von goto und einfache Konditionale enthält (zusätzlich zum Muster- und Adressabgleich). Es gibt im Wesentlichen nur zwei "Variablen": Musterbereich und Speicherbereich. 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 auf abgegrenzte Felder auf einer zeilenweisen Basis ausgerichtet. Es hat viel robustere Programmierkonstrukte, einschließlich if / else , while , do / while y for (C-Stil und Array-Iteration). Es gibt vollständige Unterstützung für Variablen und eindimensionale assoziative Arrays sowie (IMO) plumpe mehrdimensionale Arrays. Mathematische Operationen ähneln denen in C. Es hat printf und Funktionen. Das "K" in "AWK" steht für " K ernighan" wie "Kernighan und Ritchie", die für ihr Buch "C Programming Language" bekannt sind (nicht zu vergessen A ho und W einberger). Es wäre denkbar, einen Detektor für akademische Plagiate zu schreiben, indem man awk .

GNU awk ( gawk ) verfügt über zahlreiche Erweiterungen, darunter echte mehrdimensionale Arrays in der neuesten Version. Es gibt weitere Variationen von awk einschließlich mawk y nawk .

Beide Programme verwenden reguläre Ausdrücke zur Auswahl und Verarbeitung von Text.

Ich würde dazu tendieren, die sed wo es Muster im Text gibt. So könnten Sie beispielsweise alle negativen Zahlen in einem Text, die in der Form "Minuszeichen gefolgt von einer Ziffernfolge" (z. B. "-231,45") vorliegen, durch die Form "Buchhalterklammer" (z. B. "(231,45)") ersetzen (was noch verbesserungswürdig ist):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

Ich würde verwenden awk wenn der Text eher wie Zeilen und Spalten aussieht oder, wie awk bezeichnet sie als "Datensätze" und "Felder". Wenn ich eine ähnliche Operation wie oben durchführen würde, aber nur für das dritte Feld in einer einfachen kommagetrennten Datei, könnte ich etwas wie folgt tun:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

Das sind natürlich nur sehr einfache Beispiele, die nicht die ganze Bandbreite der Möglichkeiten aufzeigen, die jedes System zu bieten hat.

159voto

ghostdog74 Punkte 305138

1) Was ist der Unterschied zwischen awk und sed?

Beides sind Werkzeuge, die Text transformieren. ABER awk kann mehr als nur Text manipulieren. Es ist eine eigenständige Programmiersprache mit den meisten Dingen, die man beim Programmieren lernt, wie Arrays, Schleifen, if/else-Flusskontrolle usw. Man kann auch in sed "programmieren", aber man wird den darin geschriebenen Code nicht pflegen wollen.

2) Welche Art von Anwendungen sind die besten Anwendungsfälle für sed und awk Tools?

Schlussfolgerung: Verwenden Sie sed für sehr einfaches Text-Parsing. Für alles, was darüber hinausgeht, ist awk besser. Tatsächlich können Sie sed ganz weglassen und nur awk verwenden. Da sich die Funktionen überschneiden und awk mehr kann, sollten Sie einfach awk verwenden. Sie werden auch Ihre Lernkurve reduzieren.

81voto

hek2mgl Punkte 142036

Beide Werkzeuge sind für die Arbeit mit Text gedacht, und es gibt Aufgaben, für die beide Werkzeuge verwendet werden können.

Für mich ist die Regel, sie zu trennen: Verwenden Sie sed um Aufgaben zu automatisieren, die Sie sonst manuell in einem Texteditor erledigen würden. Deshalb wird es Stream genannt Herausgeber . (Sie können die gleichen Befehle verwenden, um Text in vim zu bearbeiten). Verwenden Sie awk wenn Sie Text analysieren wollen, d.h. Felder zählen, Summen berechnen, Strukturen extrahieren und reorganisieren usw.

Außerdem sollten Sie Folgendes nicht vergessen grep . Verwenden Sie grep wenn Sie nur etwas in einem Text (einer Datei) suchen/extrahieren wollen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X