[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [github:theryangeary/choose:choose] ist eine Alternative zum Befehl [:cut:] und dient zum spaltenweisen Extrahieren von Daten aus einer Datei. choose ist in Rust programmiert, die Syntax bei der Auswahl der Spalten orientiert sich jedoch an der Syntax von Python zum [https://realpython.com/lessons/indexing-and-slicing/ Slicing] {en}. choose kann von der Standardeingabe lesen und die Ausgabe erfolgt standardmäßig auf die Standardausgabe. Damit eignet sich choose auch zur Verwendung in Befehlsketten in Kombination mit dem [:Shell/Umleitungen/#Der-Pipe-Operator:Pipe-Operator:] oder zur Verwendung in Shellskripten. = Installation = choose kann über den Rust-Paketmanager [:cargo:] installiert werden[1]: {{{#!vorlage Befehl cargo install choose }}} [[Vorlage(Fremd, Software)]] = Benutzung = Die allgemeine Syntax von choose lautet: {{{#!vorlage Befehl choose [OPTIONEN] AUSWAHL }}} Wird bei den Optionen keine Eingabedatei angegeben, liest das Programm von der Standardeingabe. Wird bei den Optionen kein Feldtrenner spezifiziert, wird das Leerzeichen als Feldtrenner angenommen. `AUSWAHL` ist, wie bei vielen Programmiersprachen üblich, ein Null-basierter Index, d.h. die erste Spalte wird mit 0 referenziert. Beispiel: {{{#!vorlage Befehl echo 'Ubuntu ist toll' | choose 0 }}} liefert {{{ Ubuntu }}} als Ausgabe. Würde man die `0` hinter `choose` durch eine `2` ersetzen, wäre die Ausgabe `toll`. Die Ausgabe von choose erfolgt immer auf die Standardausgabe, also in der Regel das Terminal, in dem man das Programm ausführt. Möchte man choose auf eine Eingabedatei anwenden, dient dazu die Option `-i`. Für die folgenden Beispiele wird die dargestellte CSV-Datei '''release.csv''' genutzt: {{{#!code csv Name;Version;LTS/STS;Erscheinungsdatum;Supportende Jammy Jellyfish;22.04;LTS;21. April 2022 ;April 2027 Impish Indri;21.10;STS;14. Oktober 2021;14. Juli 2022 Hirsute Hippo;21.04;STS;22. April 2021;20. Januar 2022 Groovy Gorilla;20.10;STS;22. Oktober 2020;22. Juli 2021 Focal Fossa;20.04;LTS;23. April 2020;April 2025 }}} Da in der Datei das Semikolon als Feldtrenner genutzt wird, muss zusätzlich für choose der Feldtrenner mit `-f ';` angegeben werden. Ausgabe der ersten und fünften Spalte {{{#!vorlage Befehl choose -i releases.csv -f ';' 0 4 }}} {{{ Name Supportende Jammy Jellyfish April 2027 Impish Indri 14. Juli 2022 Hirsute Hippo 20. Januar 2022 Groovy Gorilla 22. Juli 2021 Focal Fossa April 2025 }}} Ausgabe der letzten Spalte: {{{#!vorlage Befehl choose -i releases.csv -f ';' -1 }}} {{{ Supportende April 2027 14. Juli 2022 20. Januar 2022 22. Juli 2021 April 2025 }}} Ausgabe der 2. bis zur 4. Spalte, exklusive der 4. Spalte: {{{#!vorlage Befehl choose -i releases.csv -f ';' 1..3 }}} {{{ Version LTS/STS 22.04 LTS 21.10 STS 21.04 STS 20.10 STS 20.04 LTS }}} Ausgabe der 2. bis zur 4. Spalte, inklusive der 4. Spalte: {{{#!vorlage Befehl choose -i releases.csv -f ';' 1..=3 #oder auch: choose - release.csv -f ';' 1:3 }}} {{{ Version LTS/STS Erscheinungsdatum 22.04 LTS 21. April 2022 21.10 STS 14. Oktober 2021 21.04 STS 22. April 2021 20.10 STS 22. Oktober 2020 20.04 LTS 23. April 2020 }}} Man kann über die Option `-o` einen Feldtrenner für die Ausgabe setzen, im folgenden Beispiel `- ` (also: Leerzeichen Minus Leerzeichen): {{{#!vorlage Befehl choose -i releases.csv -f ';' -o ' - ' 0:1 }}} {{{ Name - Version Jammy Jellyfish - 22.04 Impish Indri - 21.10 Hirsute Hippo - 21.04 Groovy Gorilla - 20.10 Focal Fossa - 20.04 }}} Als Feldtrenner kann choose einen beliebigen, für die Programmiersprache Rust gültigen, [https://docs.rs/regex/latest/regex/ regulären Ausdruck] {en} verwenden. Hat man beispielsweise die folgende Eingabedatei namens '''einszweidrei.txt''' {{{#!code csv eins zwei drei one two three een twee drie }}} und wendet den Befehl {{{#!vorlage Befehl choose -i einszweidrei.txt -f '.we\w+' 1 }}} an, erhält man folgende Ausgabe: {{{ drei drie }}} Der Trenner ist der reguläre Ausdruck `.we\w+`, also: ein beliebiges Zeichen, gefolgt von `w` und `e`, gefolgt von mindestens einem Buchstaben und/oder einer Zahl. In der ersten und dritten Zeile trifft der Ausdruck auf `zwei` und `twee` zu und die Zeile wird dort geteilt. Es wird die 2. Spalte selektiert. Diese existiert in der zweiten Zeile der Datei nicht, da hier der reguläre Ausdruck nicht zutrifft, demzufolge nicht getrennt wird und es daher nur eine Spalte (mit dem Index 0) gibt. Mehr Beispiele und eine weitere Optionen sind in den Beispielen auf der [github:theryangeary/choose:Projektseite] des Projekts zu finden. #tag: Shell, Rust, Datenanalyse