Terminal-Minis: Einzelne Spalten ausgeben
Mit awk kommt Ihr wunderbar an einzelne Werte von Ausgaben im Terminal
Heute schießen wir mit Kanonen auf Spatzen. Die Aufgabe ist simpel: Von einer Ausgabe im Terminal, soll nur eine bestimmte Spalte ausgegeben werden. Klingt nach einer Aufgabe für ein typisches Unix-Tool, dass nur eine Sache kann und diese sehr gut. Pustekuchen. Stattdessen läuft es im Alltag meist auf eine ganze Programmiersprache hinaus.
Das Tool awk nennt sich selbst "Muster-erkennen-und-verarbeiten-Sprache" und es weiß Nutzer prächtig zu verwirren - denn ob Ihr wirklich awk nutzt oder eher gawk oder mawk oder nawk ... müsst Ihr schon nachschauen ;) Spielt aber keine Rolle, meist lautet der Befehl schlicht awk und der leitet auf die jeweilige Implementierung um und oberflächlich sind die Unterschiede auch nicht groß.
Egal, so könnte die Ausgangssituation aussehen - ein Befehl und ein Teil von dessen Ausgabe:
stat foobar
Modify: 2023-04-11 23:40:57.539831119 +0200
Change: 2023-04-11 23:40:57.539831119 +0200
Nun braucht Ihr vielleicht nur den Zeitstempel und wollt entsprechend nur Spalte 3 ausgeben - standardmäßig ist das Leerzeichen der Trenner für Spalten. Die Lösung:
stat foobar | awk '{print $3}'
Fertig, mehr braucht es nicht, nur das Print-Kommando und die Angabe der Spalte per Dollarzeichen. Häufig arbeitet man aber mit CSV-Dateien mit einem Komma als Trenner, besser Separator - und das muss dann mit angegeben werden:
echo foo,bar,hallo,welt | awk -F ',' '{print $3}'
Was wird ausgegeben? Natürlich das hallo aus der dritten Spalte.
Eine komplette Programmiersprache für so eine popelige Aufgabe ... Andererseits: Es gibt Dutzende von Webseiten, die Spaltenextraktion als Service anbieten, die Aufgabe scheint also zumindest populär.
Für Terminal-Hilfe direkt im Terminal, schaut bei cli.help vorbei.