it-swarm.com.de

Was ist der Unterschied zwischen sed und awk?

  • Was ist der Unterschied zwischen awk und sed?
  • Welche Art von Anwendung eignet sich am besten für sed- und awk-Werkzeuge?
474
Rachel

sed ist ein Streameditor. Es arbeitet zeilenweise mit Zeichenströmen. Es hat eine primitive Programmiersprache, die goto-style Schleifen und einfache Bedingungen enthält (zusätzlich zum Mustervergleich und zum Adressvergleich). 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 viel robustere Programmierkonstrukte, einschließlich if/else, while, do/while und for ( C-Style und Array-Iteration). Es gibt vollständige Unterstützung für Variablen und eindimensionale assoziative Arrays sowie kludgey mehrdimensionale Arrays (IMO). Mathematische Operationen ähneln denen in C. Sie haben printf und Funktionen. Das "K" in "AWK" steht für " K ernighan" wie in "Kernighan and Ritchie" des Buches "C Programming Language" (nicht zu Vergiss EIN ho und W einberger). Man könnte sich vorstellen, einen Detektor für akademisches Plagiat mit awk zu schreiben.

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 sed verwenden, wenn der Text Muster enthält. Beispielsweise könnten Sie alle negativen Zahlen in einem Text mit dem Format "Minuszeichen gefolgt von einer Ziffernfolge" (z. B. "-231,45") durch das Format "Klammern des Buchhalters" (z. B. "(231,45)" ersetzen. ) mit diesem (der Raum für Verbesserungen hat):

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

Ich würde awk verwenden, wenn der Text eher wie Zeilen und Spalten aussieht oder als awk "Datensätze" und "Felder" bezeichnet. Wenn ich eine ähnliche Operation wie oben ausführen würde, aber nur im dritten Feld in einer durch Kommas getrennten Datei, könnte ich Folgendes tun:

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

Dies sind natürlich nur sehr einfache Beispiele, die nicht die gesamte Bandbreite der angebotenen Funktionen veranschaulichen.

527

1) Was ist der Unterschied zwischen awk und sed?

Beides sind Werkzeuge, die Text transformieren. ABER awk kann mehr als nur Text bearbeiten. Es ist eine eigene Programmiersprache mit den meisten Dingen, die Sie beim Programmieren lernen, wie Arrays, Schleifen, If/else-Flusskontrolle usw. Sie können auch in Sed "programmieren", möchten aber den darin geschriebenen Code nicht beibehalten .

2) Welche Art von Anwendung eignet sich am besten für sed- und awk-Werkzeuge?

Fazit: Verwenden Sie sed für eine sehr einfache Textanalyse. Alles darüber hinaus ist awk besser. In der Tat können Sie sed insgesamt Graben und nur awk verwenden. Da sich ihre Funktionen überschneiden und awk mehr kann, verwenden Sie einfach awk. Sie reduzieren auch Ihre Lernkurve.

117
ghostdog74

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, um sie zu trennen: Verwenden Sie sed, um Aufgaben zu automatisieren, die Sie sonst in einem Texteditor manuell ausführen würden. Deshalb heißt es stream editor. (Sie können dieselben Befehle verwenden, um Text in vim zu bearbeiten.) Verwenden Sie awk, um Text zu analysieren, dh Felder zu zählen, Summen zu berechnen, Strukturen zu extrahieren und neu zu organisieren usw.

Auch sollten Sie grep nicht vergessen. Verwenden Sie grep, wenn Sie nur in einem Text (einer Datei) suchen/extrahieren möchten.

45
hek2mgl