Frage

  • Was ist der Unterschied zwischen awk und sed?
  • Welche Art von Anwendung sind optimal zu nutzen Fälle für sed und awk-Tools?
War es hilfreich?

Lösung

sed ist ein Stream-Editor. Es arbeitet mit Strömen von Zeichen auf einer Pro-Line-Basis. Es hat eine primitive Programmiersprache, die goto-style-Loops und einfache conditionals (zusätzlich zu dem Mustervergleich und Adress matching) umfasst. Im Wesentlichen gibt es nur zwei „Variablen“: Musterraum und Raum zu halten. Ablesbarkeit von Skripten kann schwierig sein. Mathematische Operationen sind außerordentlich bestenfalls umständlich.

Es gibt verschiedene Versionen von sed mit verschiedenen Ebenen der Unterstützung für Kommandozeilenoptionen und Sprachfunktionen.

awk ist auf getrennten Feldern orientiert auf einer Pro-Line-Basis. Es hat viele robusten Programmierkonstrukte einschließlich if / else, while, do / while und for (C-Stil und Array-Iteration). Es ist eine vollständige Unterstützung für Variablen und eindimensionales assoziative Arrays plus (IMO) kludgey mehrdimens Arrays. Mathematische Operationen ähneln denen in C. Es hat printf und Funktionen. Die "K" in "AWK" steht für " K ernighan" wie in "Kernighan und Ritchie" des Buchs "C Programming Language" Ruhm (nicht A ho zu vergessen und W Einberger). Man könnte möglicherweise einen Detektor akademischen Plagiat mit awk schreiben.

GNU awk (gawk) hat zahlreiche Erweiterungen, darunter echten mehrdimensionale Arrays in der neuesten Version. Es gibt noch andere Variationen von awk einschließlich mawk und nawk.

Beide Programme verwenden reguläre Ausdrücke für die Auswahl und Verarbeitung von Text.

Ich würde dazu neigen, sed zu verwenden, wo es Muster im Text ist. Zum Beispiel könnten Sie all negativen Zahlen in einem Text ersetzen, (zB „-231,45“) mit dem „Buchhalter Klammern“ Form (zB „(231,45)“ in der Form „durch eine Folge von Ziffern Minuszeichen gefolgt“ sind ) mit diesem (was Raum für Verbesserungen hat):

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

Ich würde awk verwenden, wenn der Text wie Zeilen und Spalten oder sieht, wie awk sie „Aufzeichnungen“ und „Felder“ bezeichnet. Wenn ich will, wie oben eine ähnliche Operation tun, sondern nur auf dem dritte Feld in einer einfachen Komma getrennte Datei ich etwas tun könnte:

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

Natürlich das sind nur sehr einfache Beispiele, die das gesamte Spektrum von Fähigkeiten nicht zeigen, dass jeder zu bieten hat.

Andere Tipps

1) Was ist der Unterschied zwischen awk und sed?

Beide sind Werkzeuge, die Text umwandeln. ABER awk kann mehr Dinge tun, außer nur Text zu manipulieren. Es ist eine Programmiersprache, die von sich selbst mit den meisten der Dinge, die Sie in der Programmierung lernen, wie Arrays, Schleifen, if / else Flusskontrolle usw. Sie können „Programm“ in als auch sed, aber Sie werden nicht den Code darin geschrieben halten wollen .

2) Welche Art von Anwendung sind am besten Anwendungsfälle für sed und awk-Tools?

Fazit: Verwenden Sie für sehr einfache Textanalyse sed. Alles darüber hinaus, awk ist besser. In der Tat kann man ganz Graben sed und nur awk verwenden. Da ihre Funktionen und awk überlappen können mehr tun, nur awk verwenden. Sie werden auch Ihre Lernkurve reduzieren.

Beide Werkzeuge sind dafür gedacht, mit Text zu arbeiten und es gibt Aufgaben beide Werkzeuge können verwendet werden.

Für mich ist die Regel, sie zu trennen ist: Verwenden Sie sed Aufgaben automatisieren Sie manuell in einem Texteditor tun sonst würde. Deshalb ist es heißt Stream Editor . (Sie können die gleichen Befehle verwenden, um Text in vim zu bearbeiten). Verwenden Sie awk, wenn Sie Text analysieren wollen, was bedeutet, Zählfeldern berechnen Summen, zu extrahieren und reorganisieren Strukturen etc.

Auch Sie sollten nicht über grep vergessen. Verwenden Sie grep wenn Sie suchen möchten / extrahieren etwas in einem Text (Datei)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top