30

Max erklärt Pipes

pipe.jpg
Symbolbild: Beige Alert

Intern tauschen wir in unserem sonnenbeschienenen Verlag kleine Bilder von Max – wir verehren ihn mit religiöser Inbrunst.

Wenn ich betrunken bin, fange ich an zu erzählen, was Max alles kann. Wenn ich betrunken bin und Max ist dabei, erklärt er mir die Welt wie ein allwissender Werthers-Echte-Opa seinem staunenden Enkel. Er erzählt mir dann beispielsweise von physikalischen Phänomenen, gegen die Geschichten vom Weihnachtshasen und vom Ostermann realistisch klingen. Oder er erklärt mir Artikel von Andreas:

Pipes kommen von der Unix Shell und stellen nichts weiter dar als
eine Technik, mit der man die Ausgabe eines Programmes direkt als
Eingabe eines anderen Programms verwendet. Dadurch brauchen Unix
Programme im Allgemeinen nur sehr wenig zu können, um trotzdem
sinnvoll zu sein.

Beispiel:

cat mail.txt | grep Max | wc -l

cat ist ein Befehl der Textdateien auf dem Bildschirm anzeigt, in dem
Fall die Datei mail.txt. Durch das Pipe-Symbol „|“ wird der Inhalt
jedoch nicht auf dem Bildschirm angezeigt, sondern an grep
weitergeleitet, das „nur“ suchen kann. grep würde mir normalerweise
alle Fundstellen eines Wortes zeigen. Allerdings leite ich es durch
die nächste pipe an „wc“ weiter, was so viel heisst wie „word count“.
-l steht für „Lines“, also zählt wc die Zeilen statt Worte. Mit der
Zeile von oben habe ich mir also dank Pipes eine Art Miniprogramm
geschrieben, dass mir Auzsgib wie oft das Wort Max in der Datei
mail.txt vorkommt.

Yahoo Pipes ist jetzt ein Versuch dieses Prinzip aufs Internet zu
übertragen und für jedermann zugänglich zu machen. Nicht der erste
Versuch und nicht der letzte und bestimmt nicht der beste. Vielleicht
bin ich auch nur so kritisch, weil es mir bis jetzt nicht gelungen
ist damit überhaupt nur irgendwas hinzubekommen, geschweige denn was
sinnvolles.

Max weist im Übrigen darauf hin, dass es ihm durchaus bewusst ist, dass

„grep“ Dateien auch direkt einlesen kann.

30 Kommentare

  1. 01
    seb

    grep -c Max mail.txt

  2. 02
    gissi

    Müsste es nicht korrekterweise heißen: „žMit der Zeile von oben habe ich mir also dank Pipes eine Art Miniprogramm geschrieben, das mir ausgibt in wie vielen Zeilen das Wort Max in der Datei mail.txt vorkommt.“

  3. 03

    @gissi: eigentlich schon, aber bei spreeblick dürfen die das auch anders =)

  4. 04

    Und im nächsten Artikel wird dann erklärt, was ein „useless use of cat“ ist, und warum dieser unter allen Umständen bekämpft werden muss :-)

  5. 05

    Max wollte doch nur endlich auch mal einen Award bekommen und wenn es nur der „useless use of cat“-Award ist.

  6. 06

    Klasse Sache so ein Max. Den sollte man bei eBay versteigern oder vermieten …

  7. 07

    Mir drängt sich die Frage auf welchen weltverändernden Sinn die Information über die Anzahl der Zeilen in der ein Wort in einer Datei vorkommt für Jemanden hat. Oder sind hier alle Hobbystatistiker?

  8. 08

    Och Michael, da gibt es einiges. Logfile-Analyse z.B. Wie oft hat ein User…, Browserzähler…, wieviele Hits an Samstagen…, …

  9. 09

    Ah, das ist also dieser legendäre „cat content“ (SCNR)

  10. 10

    Seit wann ist ‚cat content‘ sinnlos/nutzlos?

  11. 11
    Lockengelöt

    Dank Malte, danke Max, jetzt hab ichs verstanden.

  12. 12

    Michael, für Korpuslinguisten bedeuten genau solche Zahlen das Paradies mit vielen Jungfrauen drin. (Wörter wie „Textkorpora“ an sich führen da schon in mittlere Extase.)

    Im Übrigen mag ich cat und grep und wc auch viel, viel lieber als Pipes. Aber das ist das Alter…

  13. 13

    @Antworten: aha, na wer’s braucht ^^

  14. 14
    Phil

    Hi,

    > -l steht für „žLines“, also zählt wc die Zeilen statt Worte.

    > wie oft das Wort Max in der Datei mail.txt vorkommt.

    was denn nun ?!?

    Gruss,

    PvW

  15. 15

    pro Fundstelle wird eine Zeile ausgegeben. Also stimmt beides.

  16. 16

    Ja danke, jetzt habe ich es auch verstanden.

    Die Telefonanrufe=>MP3 auf 343m sind doch dann eigentlich auch Pipe Produkte, oder?

  17. 17

    Neee… Das ist schon ein „normales“ Programm. Klar funktionieren alle Programme so ähnlich, aber als Pipes bezeichnet man eben nur diese Anwendung.

  18. 18
    gissi

    @Max:
    Nein! Wenn in einer Zeile mehrmals das Wort Max vorkommt, wird dennoch von grep nur _eine_ Zeile ausgegeben. Wie bereits gesagt zählt dein Programm nur die Anzahl der Zeilen, in denen (einmal oder öfter) das Wort Max vorkommt, nicht aber die Anzahl der Maxe.

  19. 19

    Ja, gissi, du hast recht. Wie du oben lesen kannst ging es um eine schneller, kurze Mail. Ich brauchte einfach nur schnell ein simples, nachvollziehbares Beispiel. Das dieses Beispiel nicht Nerdfest ist war mir von Anfang an klar – es ging lediglich darum zu erläutern, was Pipes sind. Ich glaube, das macht es auch. (Im Groben funktioniert das Beispiel ja auch.)

  20. 20
    Acid

    Allerdings leite ich es durch die nächste pipe an „žwc“ weiter, was so viel heisst wie „žword count“.
    -l steht für „žLines“, also zählt wc die Zeilen statt Worte.

    Deswegen find ich das ganze Unix-Gezuppel unerträglich (und danke dem Herr J., dass man bei OS X nich soviel davon mitbekommt).
    „Wenn ich in die Kneipe gehe, sag ich *Yo!*, dann krieg ich ein Bier. Allerdings zeig ich dem Wirt einen Vogel dabei, also krieg ich einen Bourbon.“
    Warum kann man nicht einfach „lc“ – Line Count formulieren?

  21. 21
    Malte

    ihr versteht aber noch, wovon ihr hier redet, ja?

  22. 22

    Kannst du, wenn du magst. Der Befehl dafür lautet: alias lc=“wc -l“ .

  23. 23
    Acid

    Also würde „cat mail.txt | grep Max | lc“ zum selben Ergebnis führen?

    Hm… zu #20 (gissi)
    Gibbet auch einen Befehl, dass er die Zeilen, in denen das Wort öfter als 1x vorkommt, gesondert zählt?
    Das würde beim Schreiben sicherlich helfen. Texte in denen sich Worte zu oft wiederholen, langweilen schnell.

  24. 24

    @acid: wenn man vorher mit alias den Befehl erzeugt, dann ja.

  25. 25
    Acid

    Cool – dann find ich Unix-Gezuppel ab sofort nicht mehr (so) furchtbar.
    Kann z.B. LaTeX explizit diesen Befehl?

  26. 26

    Mit LaTeX kenne ich mich sowas von überhaupt nicht aus.

  27. 27
    gissi

    @Acid (#25)
    Ich würde quick&dirty folgenden Befehl verwenden: „cat mail.txt | tr ‚[:space:]‘ ‚\n‘ | grep -c Max“. Der mittlere Teil sorgt dafür, dass alle Leerzeichen/Tabulatoren zu Zeilenumbrüchen werden. Allerdings wird dann bei Sachen wie Max-zu-Max-Verbindung trotzdem nur ein Max gezählt. Bestimmt gibt es für diese Aufgabe auch einen eleganteren Weg :-).

  28. 28

    @Acid (25):

    Inwiefern beziehst du das jetzt auf LaTeX? Welchen Befehl soll LaTeX können?