Ich lerne ständig neue Werkzeuge, auch altmodische, weil ich gerne die richtige Lösung für das Problem verwende.
Trotzdem frage ich mich, ob es noch einen Grund gibt, einige davon zu lernen. awk
zum Beispiel ist interessant für mich, aber für einfache Textverarbeitung, kann ich grep
, cut
, sed
etc. , während für komplexe, werde ich für Python gehen.
Jetzt meine ich nicht, dass es kein mächtiges und handliches Werkzeug ist. Aber da es Zeit und Energie braucht, um ein neues Werkzeug zu lernen, lohnt es sich ?
awk
text-processing
e-satis
quelle
quelle
Antworten:
Ich denke, es hängt von der Umgebung ab, in der Sie sich befinden. Wenn Sie eine * nix-Person sind, dann ist Wissen
awk
eine gute Sache. Die einzige andere Skriptumgebung, die auf praktisch jedem * nix zu finden ist, istsh
. Während alsogrep
,sed,
etc sicher ersetzenawk
auf einer modernen Mainstream -linux
Distribution, wenn Sie exotischere Systeme bewegen, zu wissen , ein wenigawk
wirklich praktisch sein wird.awk
kann auch für mehr als nur Textverarbeitung verwendet werden. Zum Beispiel einer meiner Vorgesetzten schreibt Astronomie Code inawk
- das ist wie ganz alte Schule und genial er ist. Damals war es das beste Werkzeug für diesen Job ... und jetzt, obwohl seine Schüler wie ich Python verwenden und was nicht, bleibt er bei dem, was er weiß und gut funktioniert.Abschließend gibt es eine Menge alten Codes auf der ganzen Welt, der weiß, dass ein bisschen
awk
nicht schaden wird. Es wird dich auch besser machen * nix Person :-)quelle
Wenn Sie schnell die Grundlagen von awk lernen, können Sie in der Tat erstaunliche Dinge über die Befehlszeile tun.
Der wahre Grund, awk zu lernen, besteht darin, eine Ausrede zu haben, um das großartige Buch The AWK Programming Language der Autoren Aho, Kernighan und Weinberger zu lesen . Sie würden aus dem Namen denken, dass es Sie einfach lehrt, awk. Eigentlich ist das nur der Anfang. Der Einstieg in die Vielzahl von Problemen, die gelöst werden können, wenn eine übersichtliche Skriptsprache verwendet wird, die die Manipulation von Zeichenfolgen vereinfacht - und awk war eine der ersten -, führt den Leser in die Implementierung einer Datenbank, eines Parsers und eines Interpreters ein und (wenn mir der Speicher dient) ein Compiler für eine kleine projektspezifische Computersprache! Wenn sie nur ein Beispielbetriebssystem mit awk programmiert hätten, wäre das Buch eine ziemlich vollständige Einführung in die Informatik gewesen!
Bekanntlich klar und prägnant, wie das Originalbuch in C-Sprache, ist es auch ein wunderbares Beispiel für freundliches technisches Schreiben, das richtig gemacht wurde. Auch der Index ist ein Stück Handwerkskunst.
Awk? Wenn Sie es wissen, werden Sie es gelegentlich über die Befehlszeile verwenden, aber für alles, was größer ist, fühlen Sie sich gefangen und können nicht auf die umfassenderen Funktionen Ihres Systems und des Internets zugreifen, auf die so etwas wie Python Zugriff bietet. Aber das Buch? Sie werden immer froh sein, dass Sie es gelesen haben!
quelle
Der einzige Grund, den ich benutze,
awk
ist die automatische Aufteilung:Dies druckt das dritte durch Leerzeichen getrennte Feld in
file.in
. Es ist ein bisschen einfacher als:quelle
awk '{print $3}' < file.in
stattawk '{print $3}' file.in
? Liest awk nicht bereits Dateien, wenn sie als Argumente übergeben werden?awk
: /Ich denke, awk ist großartig, wenn Ihre Datei Spalten / Felder enthält . Ich benutze es, wenn ich eine bestimmte Spalte in einer mehrspaltigen Datei verarbeite / analysiere. Oder wenn ich eine bestimmte Spalte hinzufügen / löschen möchte.
z.B
wird nur gedruckt, wenn der Wert der 2. Spalte in einer durch Tabulatoren getrennten Datei größer als der Wert der 3. Spalte ist.
Natürlich könnte ich Perl oder Python verwenden, aber awk macht es mit einem kurzen einzeiligen Befehl so viel einfacher.
Auch awk zu lernen ist ziemlich kostengünstig. Sie können awk-Grundlagen in weniger als einer Stunde erlernen, es ist also nicht so aufwändig wie das Erlernen einer anderen Programmier- / Skriptsprache.
quelle
Ich benutze AWK gelegentlich für den Umgang mit HTML. Dieser Code übersetzt beispielsweise Tabellen in CSV-Dateien:
Was großartig ist, wenn Sie Bildschirmkratzen. Eigentlich könnte es sein, dass ich AWK liebe, weil ich so schnell die falsche Lösung für Probleme finden kann :) Weitere Beispiele . Es wird auch in Jon Bentleys schönen Programmierperlen erwähnt .
quelle
Ich benutze ab und zu awk. Es ist gut für sehr einfaches Mischen von Text mitten in einer Pipeline. Es füllt eine sehr enge Nische zwischen der Notwendigkeit, es überhaupt nicht zu benötigen und der Notwendigkeit, Perl / Python / was auch immer auszupeitschen.
Ich würde Ihnen nicht raten, viel Zeit damit zu verbringen, aber es könnte nützlich sein, die Grundlagen der Syntax zu kennen - zumindest so weit, dass Sie das Handbuch schnell konsultieren können, falls Sie es jemals verwenden möchten.
quelle
6 Jahre nachdem ich diese Frage gestellt habe, kann ich jetzt mit Sicherheit antworten: Nein, awk zu lernen ist es nicht wert.
Grundlegende Aufgaben sind einfache Bash-Befehle oder sogar einfache GUI-Tools. Komplexere Aufgaben können mit modernen dynamischen Sprachen wie Python (fav oder mine) oder Ruby problemlos gelöst werden.
Sie sollten auf jeden Fall eine moderne dynamische Skriptsprache lernen, da diese Ihnen bei so vielen Aufgaben (Web, Admin, Datenverarbeitung, Automatisierung usw.) hilft. Und wenn Sie so ein Werkzeug wie awk lernen, ist das völlig nutzlos. Sie sparen jedenfalls bestenfalls ein paar Sekunden pro Monat.
quelle
Die meisten awk one-Liner können mit Perl one-Liner erzielt werden - wenn Sie sich für eine Perl one liner-Denkweise entscheiden. Oder verwenden Sie einfach Perl drei Liner :)
Wenn Sie Shell-Skripte pflegen, die von jemandem geschrieben wurden, der awk mochte, müssen Sie awk lernen.
Selbst wenn es keinen praktischen Bedarf gibt, wird es nicht lange dauern, bis Sie die Grundlagen erlernt haben, wenn Sie Regex bereits kennen, und es macht Spaß zu sehen, wie die Dinge damals entworfen wurden. Es ist ziemlich elegant.
quelle
Wenn Sie sed bereits kennen und verwenden, können Sie auch mindestens ein bisschen awk aufnehmen. Sie können für einige ziemlich mächtige Tricks zusammengefügt werden. Beeindruckt immer das Publikum.
quelle
Computerworld hat kürzlich ein Interview mit Alfred V. Aho (einem der drei Schöpfer von AWK) über AWK geführt. Es ist eine ziemlich interessante Lektüre. Vielleicht finden Sie darin einige Hinweise, warum es eine gute Idee ist, AWK zu lernen.
quelle
Das Erlernen von AWK war für mich in meinem letzten Vertrag von unschätzbarem Wert, als ich an einem eingebetteten Linux-System arbeitete, auf dem weder Perl noch die meisten anderen Skriptsprachen installiert waren.
quelle
awk hat ein sehr gutes Verhältnis von Dienstprogramm / Schwierigkeitsgrad und "simple awk" funktioniert unter jedem Unix / Linux / MacOS (und kann auch auf anderen Systemen installiert werden).
Es wurde im Goldenen Zeitalter entwickelt, als die Leute das Tippen hassten, so dass Skripte sehr, sehr kurz und schnell zu schreiben sind. Ich werde versuchen, mawk zu installieren, eine schnelle Version, die angeblich die Berechnung ungefähr 9-mal beschleunigt. Awk / gawk ist ziemlich langsam. Wenn Sie sie also anstelle von R usw. verwenden möchten, möchten Sie möglicherweise mawk.
quelle
Dies ist vor allem dann nützlich, wenn Sie gelegentlich Protokolldateien für Daten oder die Ausgabe von Programmen während der Shell-Skripterstellung analysieren müssen, da es in awk sehr einfach ist, zu erreichen, dass Sie dadurch etwas mehr Codezeilen in Python benötigen.
Es hat sicherlich mehr Kraft als das, aber dies scheinen Aufgaben zu sein, für die die meisten Leute es benutzen.
quelle
Natürlich: Ich arbeite in einer Umgebung, in der die einzigen verfügbaren Sprachen sind: (eine Shity-Sprache, die COBOL, OMG, OMG generiert), Bash (alte Version), Perl (ich beherrsche es noch nicht), Sed, Awk und einige andere Befehlszeilenprogramme. Das Wissen
awk
ersparte mir mehrere Stunden (und hatte mehrere Textverarbeitungsaufgaben von meinen Kollegen generiert - sie kommen mindestens dreimal am Tag zu mir).quelle
Ich würde sagen, es lohnt sich wahrscheinlich nicht mehr. Ich benutze es von Zeit zu Zeit als viel vielseitigeren Stream-Editor als sed mit Suchfähigkeiten, aber wenn Sie mit Python vertraut sind, kenne ich keine Aufgabe, die Sie so viel schneller erledigen können, um die benötigte Zeit zu kompensieren awk lernen.
Der folgende Befehl ist wahrscheinlich der einzige, für den ich in den letzten zwei Jahren awk verwendet habe (er löscht halb entfernte Pakete von meinen Debian / Ubuntu-Systemen):
quelle
Nee.
Auch wenn es interessant sein mag, können Sie alles, was awk kann, mit anderen, leistungsstärkeren Tools wie Perl tun.
Verbringen Sie Ihre Zeit damit, diese leistungsstärkeren Werkzeuge zu erlernen - und nehmen Sie dabei nur gelegentlich etwas Awk mit.
quelle
Ich würde sagen, dass es gibt. Für einfache Dinge ist AWK für den unerfahrenen Systemadministrator / Entwickler viel einfacher als Python. Sie können ein wenig AWK lernen und viele Dinge tun. Python zu lernen bedeutet, eine ganz neue Sprache zu lernen (ja, ich weiß, AWK ist eine Sprache, die auch Sinn macht).
Perl ist vielleicht in der Lage, viele Dinge zu tun, die AWK tun kann, bot aber heutzutage die Wahl, Python hier zu wählen. Also ja, du solltest AWK lernen. aber lerne auch Python :-)
quelle
awk
ist eine Powertool-Sprache, daher werden Sie wahrscheinlichawk
irgendwo verwendet, wenn Sie ein IT- Experte jeglicher Art sind. Wenn Sie mit der Syntax und den regulären Ausdrücken vongrep
und umgehen könnensed
, sollten Sie keine Probleme beim Aufnehmen habenawk
und es lohnt sich wahrscheinlich, dies zu tun.Wo ich
awk
wirklich Glanz gefunden habe, liegt in der Vereinfachung von Dingen wie der Verarbeitung mehrzeiliger Datensätze und dem gleichzeitigen Zerlegen / Interpolieren mehrerer Dateien.quelle
Jetzt, da PERL auf so ziemlich jede wichtige Plattform portiert ist, würde ich sagen, dass es sich nicht lohnt. Es ist vielseitiger als sed und awk zusammen. Die automatische Aufteilung kann in Perl wie folgt durchgeführt werden:
BEARBEITEN: Vielleicht möchten Sie sich noch etwas mit awk vertraut machen, da einige andere Tools auf der Philosophie musterbasierter Aktionen basieren (z. B. DTrace unter Solaris).
quelle
Ich arbeite in einem Bereich, in dem die Dateien im Spaltenformat vorliegen. Daher ist awk für mich von unschätzbarem Wert, um die Datei neu zu formatieren, damit verschiedene Software zusammenarbeiten können. Für Nicht-IT-Berufe ist die Verwendung von awk ausreichend und perfekt. Heute ist die Computergeschwindigkeit kein Problem mehr, daher kann ich awk & unix kombinieren, um viele 1-Liner-Befehle in ein "Skript" zu leiten. Bei der Awk-Suche nach Feld und Datensatz überprüfe ich die Dateidaten sehr schnell, anstatt "vi", um eine Datei zu öffnen. Ich muss sagen, dass awk-Fähigkeiten meiner Arbeit besonders Freude bereiteten. Ich kann Kollegen dabei unterstützen, Dinge mit awk schnell zu klären. Erstaunlicher Code für mich.
quelle
Ich habe kürzlich versucht, Netzwerk-PCAP-Dateien zu visualisieren, die einen DOS-Angriff protokollieren, der sich auf über 20 GBit / s beläuft. Ich brauchte den Zeitstempel und die IP-Adressen. In meinem Szenario hat der AWK -Einzeiler auch fabelhaft und ziemlich schnell gearbeitet. Ich habe AWK speziell verwendet, um die extrahierten Dateien zu bereinigen, die IP-Adressen und die Gesamtpaketanzahl von diesen IP-Adressen innerhalb einer gruppierten Zeitspanne abzurufen. Ich stimme voll und ganz dem zu, was andere Leute oben geschrieben haben. Es hängt von Ihren Bedürfnissen ab.
quelle
Ein Grund, awk NICHT zu lernen, ist, dass es keine nicht gierigen Übereinstimmungen in regulären Ausdrücken gibt.
Ich habe einen awk-Code, den ich jetzt nur noch umschreiben muss, weil ich plötzlich debuggt habe, dass es in awk / gawk keine nicht gierigen Übereinstimmungen gibt, so dass einige reguläre Ausdrücke nicht richtig ausgeführt werden können.
quelle
Es hängt von Ihren Teamkollegen und Ihrem Leiter und der Aufgabe ab, an der Sie arbeiten.
quelle
Ich habe zurzeit einige Codierungen in Python durchgeführt. Aber ich weiß es immer noch nicht gut genug, um es einfach für einfache einmalige Dateiumwandlungen zu verwenden.
Mit awk kann ich schnell einen einzeiligen Code in der Unix-Befehlszeile entwickeln, der einige ziemlich schnelle Transformationen ausführt. Jedes Mal, wenn ich awk verwende, ist der Code, den ich schreibe, verfügbar und nicht länger als ein paar Zeilen. Vielleicht eine "if" -Anweisung und eine "printf" -Anweisung hier oder da in der einen Zeile.
Ich habe mit awk noch nie einen Code geschrieben, der länger als 10 Zeilen ist. Ich habe einige solcher Skripte vor Jahren gesehen.
Aber alles, was viele Codezeilen erforderte, würde ich auf Python zurückgreifen.
Ich liebe awk. Es ist ein sehr leistungsfähiges Werkzeug in Kombination mit sed.
quelle