
Abbildung 4: Die Reihenfolge, in der Sie die Optionen angeben, hat eine Auswirkung auf das Ergebnis.
Miller konvertiert
Mittels cat konvertiert Miller die in der Tabelle “Datenstrukturen” aufgeführten Formate. Dazu setzen Sie vor die Bezeichnung für die Eingabe ein i, vor die für die Ausgabe ein o. Aus einer CSV-Datei entsteht auf diesem Wege eine im DKVP-Format (Listing 1, Zeile 6). Der umgekehrte Weg funktioniert auf dieselbe Weise (Listing 1, Zeile 7).
Das Umsetzen in die zeilenweise Anzeige (XTAB-Format) erweist sich beispielsweise beim Erstellen von Nicht-GUI-Anwendungen als sehr hilfreich, etwa bei einer Abfrage von Adressen (Listing 1, Zeile 8). Die abgearbeiteten Beispiele finden Sie in der Abbildung 5.
Suchen und finden
Für das Durchsuchen von strukturierten Textdateien verfügt Miller über die Kommandos grep und filter. Letzteres kennt eine Vielzahl von Möglichkeiten, besonders hinsichtlich numerischer Auswertungen. Dabei gibt die Software stets die Kopfzeile mit aus.
Das Beispiel aus den ersten beiden Zeilen von Listing 2 zeigt das Durchsuchen der Datei csv3.txt nach dem Namen “Meier”. Beim Kommando filter geben Sie die Spalte an, mit grep brauchen Sie das nicht. Insoweit arbeitet die erste Methode präziser, da der Suchbegriff ja möglicherweise in mehreren Spalten steckt.
Listing 2
$ mlr --csv --rs lf filter '($Name == "Meier")' csv3.txt $ mlr --csv --rs lf grep 'Meier' csv3.txt $ mlr --csv --rs lf filter '($Beitrag > 20)' csv3.txt
Das Beispiel in der letzten Zeile von Listing 2 dreht sich um das Ergebnis einer numerischen Auswertung. Dabei extrahiert Miller aus cvs3.txt alle Beiträge, die 20 Euro übersteigen.
Abbildung 6 zeigt die drei Kommandos sowie die daraus resultierenden Ausgaben.

Abbildung 6: Die Miller-Kommandos »filter« und »grep« bieten einen einfachen Weg, um spezielle Datensätze aus den Feldern zu extrahieren.
Ordnen und sortieren
Mit den Miller-Kommandos group-by, group-like, head, join, rename, reorder, sample, sort, tail und uniq sortieren und gruppieren Sie Daten.
Das Beispiel aus Abbildung 7 demonstriert den Unterschied zwischen den Kommandos group-by und join (Listing 3, Zeile 1 und 2). Ersteres fasst gleiche Zeilen zusammen, Letzteres gibt nur die übereinstimmenden aus. Bei join geben Sie die Option -u mit an, um beliebig sortierte Dateien zu verarbeiten.

Abbildung 7: Die Kommandos »group-by« und »join« erlauben es, Zeilen mit gleichen Inhalten zusammenzufassen.
Listing 3
$ mlr --csv --rs lf group-by Name csv3.txt csv4.txt $ mlr --csv --rs lf join -u -j Name -f csv3.txt csv4.txt $ mlr --csv --rs lf head -n 1 csv3.txt $ mlr --csv --rs lf tail -n 1 csv3.txt
Beachten Sie, dass beide Methoden die Angabe der Spalte benötigen, nach der sich die Ausgabe richtet. Außerdem gibt Miller stets Kopfzeilen mit aus. Dies gilt es bei zeilenorientierten Anweisungen wie denen aus den letzten beiden Zeilen von Listing 3 zu beachten, deren Ergebnis Abbildung 8 zeigt. Stören die Kopfzeilen bei der Weiterverarbeitung, greifen Sie einfach auf die Originalbefehle des Betriebssystems zurück.

Abbildung 8: Stören die Kopfzeilen beim weiteren Verarbeiten, greifen Sie auf die klassischen Unix-Tools mit ähnlicher Funktion zurück.
Wenn Sie mittels rename die Namen der Spalten ändern möchten, geben Sie die Bezeichner in der Form AlterName,NeuerName an. Das funktioniert zwar auch für mehrere Bezeichner gleichzeitig, sieht aber zuweilen unübersichtlich aus, da Sie die Namen bündig und nur durch ein Komma getrennt angeben müssen.
Achten Sie darauf, dass die Zahl der alten und neuen Spaltenbezeichner immer geradzahlig sein muss – dann haben Sie nichts vergessen. An der Benennung der Felder in der Kopfzeile der Datei ändert sich durch den Befehl nichts, die neuen Namen tauchen nur in der Ausgabe auf. Die erste Zeile von Listing 4 zeigt ein Beispiel für eine solche Umbenennung, wobei die Option --opprint für eine übersichtlichere Optik sorgt.






