Ist Perl jemals ein besseres Tool als awk für die Textverarbeitung? [Closed]

2

Diese Frage wurde von einer Diskussion über Stackoverflow inspiriert - siehe insbesondere den Kommentarthread unter Ed Mortons Antwort .

Ich nahm an, dass dies der Ort war, an dem ich eine endgültige Antwort bekommen konnte:

In welchen Situationen empfehlen Sie die Verwendung von Perl anstelle von awk für komplexe Textverarbeitungsaufgaben (Datei)?

Ich suche speziell nach Beispielen, bei denen Perl auch nicht

  1. Macht etwas möglich, was mit awk nicht möglich ist
  2. Effizientere (schnellere) Implementierung einer bestimmten Operation
  3. Das Ergebnis sind besser lesbare und leichter zu pflegende Skripte

Ich bin mir bewusst, dass dies eine Frage vom Typ "Meinung / Diskussion / Religion" sein könnte. Ich hoffe jedoch, dass die drei oben genannten Kriterien einen objektiven Vergleich der Vorteile dieser beiden Instrumente ermöglichen. Erkenne auch, dass ich auf diese Frage als Person mit beträchtlicher Erfahrung mit 'nix komme, aber keine formale Ausbildung; Ich "lerne Dinge, wie ich sie brauche" und frage mich, ob es einen Grund gibt, mich in Perl zu vertiefen und es zu lernen.

Update auf ein paar Kommentare basierend, möchte ich die Frage erweitern:

Gibt es bestimmte Perl-Bibliotheken, die Sie häufig verwenden und mit denen Sie bei einer Reihe von Problemen über awk nach Perl greifen können?

Floris
quelle
3
Dies ist eine schlechte Frage, bitte nicht beantworten! Es ist völlig off-Topic! Wenn Sie nicht verstehen, warum dann LESEN! unix.stackexchange.com/help
slm
2
Schnelle Antwort: Ja, deshalb wurde es geschaffen.
terdon
2
@Floris - nein, die Seite ist nicht dazu gedacht, mit Fragen so umfassend umzugehen, wie Sie es sich vorgestellt haben. Ich kenne den Abschnitt der "subjektiven" Fragen, und dies liegt weit außerhalb des Rahmens dieser 1 besonderen Frage Kugel. Wenn Sie ein konkretes Beispiel hätten, gäbe es ein wenig Spielraum, aber so wie es aussieht, passt dieses Q einfach nicht.
slm
1
Ich denke, Sie fragen sich: "Lohnt es sich zu lernen, perlwenn ich es bereits benutze awk?". IMO, wenn Sie nicht generell an der Programmierung interessiert sind, sondern lediglich System-Tools zum Ausführen von Verwaltungsaufgaben wie dem Parsen von Text benötigen, dann nein. Wenn Sie jedoch allgemeine Programmieraufgaben haben und noch keine der in * nix-Umgebungen (Perl, Python oder Ruby) allgegenwärtigen dynamisch typisierten, interpretierten OO-Mehrzwecksprachen verwenden, sollten Sie dies tun. Es ist jedoch nicht erforderlich, mehr als einen dieser drei Punkte zu lernen.
Goldlöckchen
2
Wenn Sie bereits Python verwenden, sehe ich in Perl keinen Grund (umgekehrt erfüllt Python als Perl-Benutzer für mich keinen Zweck). Diese beiden Sprachen besetzen genau die gleiche Nische und beide sind mit Sicherheit in der Lage, alles Mögliche in Bezug auf die Textverarbeitung zu tun .
Goldlöckchen

Antworten:

3

Perl (das Pathologisch Eclectic Rubbish Lister) ist die jüngste Software und versucht , Features von zu schaffen sed, grepund awk. Einige Systeme verwenden Perl immer noch nicht, daher müssen Sie es immer noch verwenden awk.

Wenn Sie kleine kurze Skripte haben, awkist dies schneller, da nicht viel RAM verwendet wird. Aber diese Frage ist heutzutage eher unwichtig.

Perl hat den Vorteil, eine riesige Bibliothek zu verwenden, zum Beispiel bignum:

perl -Mbignum=p,-50 -e 'print 7 / 17 * 2 ** 1024'
74022658494330655024147860797195136090151993250565247519682704773906208395466727932632852195642113248713093779803824795490433138400407947242956458140922662778116418363136978425944182630002816083132493908286100432062606400696408888454667905350718062803228883801119937832891791040171399808266545264132627555599.49778888545891662481444755946205525353595725152256

Die Lesbarkeit des Codes ist immer ein Attribut des Autors. Sie können gut lesbaren Code schreiben, der nicht von der von Ihnen verwendeten Sprache abhängt.


quelle
1
Die Größe des von verwendeten Arbeitsspeichers awkhängt davon ab, was Sie damit machen.
terdon
Wow - dieses Beispiel ist sicherlich etwas wert. Normalerweise würde ich dafür bcallerdings verwenden - ich halte dies nicht für eine "Textverarbeitungs" -Aufgabe. echo 'scale=16; 7 / 17 * 2 ^ 1024' | bc.
Floris
Schön, aber die Ergebnisse sind unterschiedlich! Wer ist dann falsch?
Ok, behoben. Die p,-50gibt die Genauigkeit und die negativen Werte bedeuten eine feste Anzahl von Ziffern nach dem Punkt.
Damit beide Zahlen übereinstimmen, muss eine ausreichende Genauigkeit angegeben werden. Es stellt sich heraus, dass der bcBefehl, wie ich ihn verwendet habe, nur auf die ersten 15 Stellen genau war: 740226584943306- Vermutlich, weil dies die Anzahl der Präzisionsstellen ist, die während des Gleitkomma-Teils der Operation übertragen wurden. Interessant.
Floris