Lohnt es sich heutzutage noch die Programmiersprache awk zu lernen?

Das Ergebnis basiert auf 13 Abstimmungen

Nein, es lohnt sich nicht mehr 69%
Ja, es lohnt sich noch 31%

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Ja, es lohnt sich noch

Ganz klares JA!

Begründung: Allein 90% (mindestens!) aller Fragen hier auf GF, die irgendwas mit dem Auswerten / Analysieren / Umformen von Textdateien zu tun haben, kann man damit erschlagen.

Und nicht nur das! Fast ausschließlich werden in den Antworten zu solchen Fragen Code-Schnipsel in Python, oder noch schlimmer Java, C#, PHP, usw. gepostet, wo eine einzige AWK-Zeile reichen würde.

Unter der Antwort von "guenterhalt" siehst du das sehr schön am Beispiel von TCL im Vergeleich mit AWK.

Im Schnitt brauchst du bei AWK nur eine einzige Zeile, während andere Skript- oder auch ausgewachsene Programmiersprachen 10 bis 30 Zeilen benötigen.

AWK ist extrem mächtig, und man kann damit neben Einzeilern auf der Konsole auch sehr saubere Skripte in Dateien verpacken, und dann wie Programme aufrufen.

Also ja, wenn du heute (2020) möglichst effizient und schnell einfachere Textdaten verarbeiten willst, gibt es kaum etwas Mächtigeres als AWK.

Erst wenn die Formate komplexer werden, solltest du härtere Geschütze wie Python auffahren, aber - wie gesgt - du kannst sicherlich 90% aller alltäglichen Probleme mit Textdateien, die hier auf GF geschildert werden, mit einer einzigen eleganten Zeile AWK lösen.

Zumal AWK kein Hexenwerk ist, und man es auch als totaler Idiot binnen einer Woche lernen kann, wenn man sich jeden Nachmittag mal ein / zwei Stunden damit befasst.

Und das, was in dem anderen Kommentar zu den impliziten Variablen angesprochen wurde, ist ein sehr großer Vorteil, und kein Nachteil!

Falls du "wc" nicht zur Hand hast, kannst du mit ...

awk 'END { print NR }' foo.txt

... die Anzahl der Zeilen der Datei "foo.txt" zählen. Du kannst nicht behaupten, dass dieser Einzeiler nicht "sprechend" oder schwer verständlich ist.

Ich denke also, die Frage, ob man AWK lernen sollte, stellt sich gar nicht.

Genauso wenig, wie sich die Frage stellt, ob man den Umgang mit unixoiden Shells lernen sollte, oder gut mit sed, grep, usw. umgehen können sollte.

Wenn ich mir vorstelle, jedes mal extra ein 10-Zeilen Python- oder Ruby-Skript basteln zu müssen, um irgendeinen Pippifax zu erledigen, das wäre mir einfach viel zu viel Zeitverschwendung.

Perl bildet hierbei eine Ausnahme: Hat ebenfalls implizite Variablen und erlaubt ebenfalls extrem kompakten Code, was von Uneingeweihten leider immer als "kompliziert" missverstanden wird.

Ach und ... TCL solltest du natürlich auch lernen! Ich habe 1996 auf einem uralten SuSE-Linux mit TCL und TK einen Bomberman-Clone geschrieben. Also unterschätze diese Kombinattion nicht! Ist extrem mächtig!

Aber egal ... auf jeden Fall ist AWK auch heute noch, wie vor 30 Jahren, das mächtigste Werkzeug in seinem Bereich, für das es auch heute noch keinen Ersatz gibt. Behalte das bitte im Hinterkopf!

Naja, viel Spaß! :)

Woher ich das weiß:Berufserfahrung
Nein, es lohnt sich nicht mehr

auch von Perl habe ich schon lange nicht mehr gehört. Heute benutzt man Python oder besser Groovy.

das musst du für dich allein entscheiden. Wer awk nicht beruflich braucht, der muss awk auch nicht lernen.
Auch wenn ich sehr viel mit Unix und Linux gearbeitet habe, wo ich es vermeiden konnte, habe ich diese Sprache vermieden und tcl (also auch nicht Perl) benutzt.
Tcl gibt es "schon immer" für Unix, Linux, Mac und auch für Windows.
Man muss schon etwas mehr an Script-Code schreibe, dafür ist der dann auch nach Jahren noch zu verstehen, auch wenn man die Sprache "verlernt" hat.

awk ist entstanden, als 5MByte- Festplatten als riesig galten. So war dann auch der Code minimal. .....

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995
Anonym391144  26.07.2020, 14:16

Dann habe ich doch zwei Fragen: Was gefällt dir an awk nicht? Und was sind geeignete Ressourcen um Tcl zu lernen?

0
guenterhalt  26.07.2020, 14:28
@Anonym391144

was mir nicht gefällt? Die wenig "menschliche Syntax".

Wer Tcl/Tk unter Linux benutzt, bekommt eine große Menge Demonstationsbeispiele mitgeliefert (die muss man aber suchen)
(bei mir: /usr/lib64/tcl/tk8.6/demos/widget )

Dazu gibt es für für jeden einzelnen Befehl ein Manual.

 man n if 

oder

man n  button 

Meine Bücher für einen Überblick sind schon 20 Jahre alt. Suche selbst z.B. bei a-bay Tcl/Tk kurz & gut von Raines, Paul ca. 5,-€

1
guenterhalt  26.07.2020, 16:25
@guenterhalt

....

set fp [ open script.txt r ] 
set i 0
while { ![eof $fp ] } { set line [gets $fp ]                                     
                                    incr i  
                                    if { [regexp Hallo $line ] } { puts  "Hallo in Zeile $i gefunden" }
                               }

da muss man nur wissen, was open bedeutet, dass das r für read steht, incr die Variable i um 1 erhöht, ....
Dieses Script ist also lesbar!

1
andie00  26.07.2020, 17:12
@guenterhalt

Um den Unterschied zu zeigen, hab ich mir mal erlaubt dein Beispiel in awk nachzubilden:

gawk '/Hallo/{print "Hallo in Zeile "NR" gefunden"}' script.txt
0
guenterhalt  26.07.2020, 19:53
@andie00

genau das mit "NR" ist das, was ich an awk und anderen Sprachen, nicht mag. Da sind versteckte Dinge, die man kennen muss.

In Tcl gibt nur wenig solche Dinge. [ open script.txt r ] ist so ein Beispiel, auch ohne r wird für read geöffnet. Bei Tk müssen nicht alle Parameter angegeben werden, da gelten Default-Parameter. Wer die nicht kennt, nicht so schlimm, es funktioniert trotzdem.

0
andie00  26.07.2020, 20:40
@guenterhalt

NR bedeutet "number of records", im allgemeinen sind mit record Zeilen (getrennt durch newline) gemeint, NR ist also die (Gesamt) Nummer der Zeile.

Ein anderes builtin wäre FNR, was wie NR die Zeilennummer allerdings je Datei ist.

Ich bin mit tcl leider viel zuwenig vertraut um das zu beurteilen, aber ich denke dort gibt sicher auch Befehle / builtins die man lernt (klar es gibt immer andere Wege, z.B. hätte ich anstelle von NR einen Zähler einbauen können).

0
MrAmazing2  27.07.2020, 13:21
Wer awk nicht beruflich braucht, der muss awk auch nicht lernen.

Doch, man muss das in der Uni lernen. Im Fach Betriebssysteme. (Obwohl man es niemals brauchen wird).

0
guenterhalt  27.07.2020, 15:38
@MrAmazing2

da hatte ich aber Glück. Als ich studiert habe, galten Unix und auch awk noch als Schreibfehler.
Ich will nicht die Bedeutung solcher Werkzeuge herabwürdigen, für Minimalsysteme haben sie wie vi als Editor durchaus Berechtigung.
Am PC muss haute aber keine mehr über 100 Byte mehr nachdenken.

Wir haben noch in Assembler, d.h. alles "zu Fuß" programmiert. Von Schaden war es nicht, auch "ganz unten" anzufangen. Später habe ich Programmierer kennengelernt, die konnten mit Stack oder FiFo nichts anfangen.

1
Ja, es lohnt sich noch

Ich finde gerade, wenn man schnell mal was scripten will, ist man mit awk meist besser beraten als mit Perl. Ich nutze es zur Bearbeitung von Dateien nach wie vor.

Nein, es lohnt sich nicht mehr

Ich verwende AWK schon lange nicht mehr.

Kleine Tools in C/C++ geschrieben von mir selbst haben sich (für mich jedenfalls) als deutlich hilfreicher erwiersen.

grtgrt  27.07.2020, 14:55

Sie alle basieren auf einer in C++ geschriebenen Klasse, die in so gut wie jedem meiner Programme steckt. Ich möchte sie nicht mehr missen und verwende sie fast täglich als Teil von Programmen, die in unterschiedlichster Weise Text analysieren und transformieren.

0
Anonym391144  27.07.2020, 14:55
@grtgrt

Warum veröffentlichst du diese nicht, sodass auch andere Programmierer davon profitieren?

0
grtgrt  27.07.2020, 15:10
@Anonym391144

Sie ist abhängig von einem (noch etwas älteren) Framework, das ich nutze, um in Code, der in C/C++ geschtrieben ist, schnell hin zur Ursache irgendwo auftretender Laufzeitfehler zu finden. Mit anderen Worten: Sie ist abhängig von Code, den andere so nicht wirklich nutzen würden wollen. Ich erwähne sie hier nur als Beispiel dafür, wie einfach es ist, AWK durch etwas deutlich Hilfreicheres zu ersetzen.

1