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.

Listing 4

$ mlr --csv --rs lf --opprint rename Name,Familienname,Beitrag,Jahresbeitrag csv3.txt
$ mlr --csv --rs lf reorder -f Beitrag,Vorname,Name csv3.txt
$ mlr --csv --rs lf sort -f Name,Vorname csv3.txt csv4.txt
$ mlr --csv --rs lf --opprint uniq -c -g Name,Vorname,Beitrag csv3.txt csv4.txt

Zum Umstellen der Spaltenposition brauchen Sie das Kommando reorder. Geben Sie alle vorhandenen Spaltennamen an (Listing 4, Zeile 2), kommt die Ausgabe in der gewünschten Reihenfolge zustande. Andernfalls stellt Miller die Änderungen an das Ende oder den Anfang. Zwei entsprechende Beispiele finden Sie in Abbildung 9.

Abbildung 9: Bei Bedarf ändern Sie die Namen der Spalten und deren Reihenfolge. Im Beispiel sorgt die Option --opprint für mehr Übersicht.

Mittels der Kommandos sort und uniq nehmen Sie Einfluss auf die Reihung der Datensätze beziehungsweise Zeilen. Während Sie mit sort ähnlich group-by gleichwertige Zeilen in der Reihung hintereinander ausgeben, fasst uniq diese zusammen (Listing 4, Zeile 3 und 4).

Für das Anwendungsbeispiel mit uniq kommt auch dessen Option -c zum Einsatz. Sie erhalten damit eine Zählung der Häufigkeit von identischen Zeilen. Abbildung 10 zeigt die entsprechenden Beispiele.

Abbildung 10: Benötigen Sie die Datensätze in einer bestimmten Reihenfolge und ohne Dubletten, greifen Sie auf die Miller-Kommandos sort und uniq zurück.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Sauber verzahnt
    Verbinden, trennen, umformatieren: Unter Linux gibt es zahlreiche kleine Helfer, die die Arbeit mit Textdateien perfekt beherrschen – und die dazu noch perfekt zusammenarbeiten.
  • Am Fließband
    Mit Sed editieren Sie Textdaten ohne interaktive Benutzeroberfläche – auch in Pipes oder der Eingabeumlenkung. In einer einzigen Zeile lassen sich umfangreiche Editierkommandos absetzen.
  • Durchblick im Quellcode dank Syntax-Highlighting
    Quellcode liest sich oft schwer. Eine Syntaxhervorhebung macht klar, worauf es ankommt.
  • Mehr Komfort
    Von einfachen Abfragen bis hin zu komplexen Menüs: Mit dem Toolkit Dialog bauen Sie eine grafische Oberfläche für Shell-Skripte, die oft nicht mehr als eine zusätzliche Zeile brauchen.
  • LaTeX mit Daten aus externen Quellen anreichern
    Ob Serienbrief oder Teilnehmerliste – mit dem richtigen Adapter befüllen Sie LaTeX-Dokumente problemlos mit den Feldinhalten einer Datenbank und erstellen so Druckerzeugnisse in perfekter Qualität.
Kommentare

Infos zur Publikation

LU 01/2018: FLINKE BROWSER

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Linux Mint als Zweitsystem
Wolfgang Robert Luhn, 13.01.2018 19:28, 3 Antworten
Wer kann mir helfen??? Habe einen neuen Laptop mit vorinstaliertem Windows 10 gekauft. Möchte g...
externe soundkarte Kaufempfehlung
lara grafstr , 13.01.2018 10:20, 3 Antworten
Hallo Ich bin auf Suche nach einer externen soundkarte.. Max 150 Euro Die Wiedergabe is...
Prozessor-Sicherheitslücke Meltdown und Spectre
Wimpy *, 06.01.2018 10:45, 2 Antworten
Ich habe heute ein Sicherheitsupdate "ucode-intel" für openSuse 42.3 erhalten. Ist damit das Prob...
LENOVO ideapad320 Touchpad Linux Mint 18
Peter Deppen, 23.12.2017 16:49, 3 Antworten
Hallo, bin Linux Anfänger und habe das Problem, dass das Touchpad auf dem LENOVO ideapad320 mit L...
PClinuxOS
Günter Beckmann, 20.12.2017 09:51, 1 Antworten
Hi, LUC, hat jemand von Euch Erfahrung mit dem in Heft 12/2017 vorgestelletn PClinuxOS? Ich...