UNIX-Kommandozeilen-Tools für Data Scientists

Die Kommandozeile (die “Shell”) mit einem Terminal-Fenster zu erreichen. Das Programm Terminal befindet sich auf dem Mac unter Programme -> Dienstprogramme -> Terminal. Windows-Nutzer müssen Google bemühen, da Windows nicht auf UNIX basiert und extra Programme installiert werden müssen.

Kommandozeile bedeutet genau das: Es werden Kommandos auf einer Zeile eingegeben, eine grafische Ausgabe oder die Möglichkeit, sich durch Menüs zu klicken, existieren nicht. Es erfordert zwar eine gewisse Lernkurve, aber beherrscht man erst einmal ein Minimal-Set an Befehlen und Optionen, so kann man sehr schnell damit arbeiten. Wichtig: Durch die Eingabe von man <Befehl> wird die Anleitung (man für Manual) angezeigt, also zum Beispiel man grep (kleiner Tipp: ruft man ein Manual auf und will wieder raus, einfach ein “q” eingeben, nicht gleich das Terminal-Fenster schließen, weil man sich im Manual gefangen fühlt :-)).

Unix-Kommandos haben in der Regel das Format Befehl Optionen Datei, zum Beispiel sort -r datei.txt.

Wichtige Befehle mit Beispielen:

  • pwd: Print Working Directory, zeigt an, wo man sich gerade befindet im Verzeichnisbaum. Nach dem Öffnen des Programms Terminal auf dem Mac befindet man sich in dem Verzeichnis /Users/<BENUTZERNAME>
  • cd: Mit cd für change directory wird durch den Verzeichnisbaum navigiert.
    • cd Desktop bringt uns in das Unterverzeichnis Desktop
    • cd .. führt uns in das nächsthöhere Verzeichnis, mit cd ../.. kann man auch zwei Ebenen höher gehen.
  • grep: Hiermit werden Muster in Dateien gesucht.
    • grep -i ‘bowie’ enwiki-latest-pages-articles.xml – Durchsuche einen Wikipedia-Dump nach dem Begriff ‘bowie’, die Option -i sorgt dafür, dass die Suche nicht “case sensitive” ist, also auch Fundstellen gefunden werden, in denen der Begriff groß geschrieben wird.
    • grep -iv ‘bowie’ enwiki-latest-pages-articles.xml – Die Option -v sorgt dafür, dass alle Zeilen ausgegeben werden, die nicht den Begriff ‘bowie’ enthalten.
  • sort: Sortiert eine Liste
    • sort -r: Sortiert eine Liste in der umgekehrten Reihenfolge
    • Gerade bei großen Dateien kann sort viel Rechenzeit kosten, eine Alternative ist das zu installierende gsort, das alle Kerne des Prozessors nutzt.
  • uniq: Entfernt alle Mehrfach-Aufkommen eines Elements in einer Liste.

Ein großer Vorteil der Kommandozeile ist die Möglichkeit der Nutzung von Pipes. Hier werden mehrere Befehle aneinander gereiht, so dass die Ausgabe eines Kommandozeilen-Programms als Eingabe für ein anderes Kommandozeilen-Programms genutzt wird. Beispiel:

sort keywords.txt | uniq -c | sort -r | less

Das Zeichen | (auf dem Mac mit alt-7 verwendbar) ist das Pipe-Symbol. In dem Beispiel wird die Datei keywords.txt zunächst sortiert, dann wird mit dem Begriff uniq und der Option -c (für count) die Häufigkeit jedes Zeileninhalts dieser Datei gezählt, und das Ergebnis wird noch mal sortiert, hier mit der Option -r für reverse, wir wollen die häufigsten Zeileninhalte zuerst sehen. Mit dem Befehl less wird dafür gesorgt, dass das Ergebnis nicht einfach nur ausgegeben wird, sondern Seite für Seite angeschaut werden kann. Soll das Ergebnis nicht auf dem Bildschirm ausgegeben werden, sondern in eine Datei, so wird die Ausgabe einfach umgelenkt, zum Beispiel

sort keywords.txt | uniq -c | sort -r > keywords.uniq.txt

Noch ein Tipp: Die Shell ist ein sehr zeitsparendes Tool, wenn man sich daran gewöhnt, nicht alles auszuschreiben, sondern die Tab-Taste (links auf der Tastatur mit dem Symbol ->| ) zu verwenden, um einen Befehl zu vervollständigen. Beispiel: Ich befinde mich in meinem Home-Verzeichnis (/Users/tomalby) und will in das Unterverzeichnis Desktop. Dann gebe ich einfach cd De ein und drücke die Tab-Taste, so dass der Befehl auf cd Desktop/ vervollständigt wird.