marv85
Anmeldungsdatum: 9. Januar 2019
Beiträge: Zähle...
|
Hallo
Ich möchte gern die Ausgabe einer Abfrage um einen Tap nach rechts verschieben. Die Ausgabe ist eine Liste von Usern.
Mit \t verschiebt sich nur die erste Zeile. Wie schaffe ich es alle Zeilen zu verschieben?
Wenn es gleiche Themen gibt dann wäre der Link sehr gut.
| output=$(sudo mysql -u $name -p$password -e "SELECT USER FROM mysql.user;")
echo -e "{\t $output}"
|
Die Ausgabe sieht so aus:
| { USER
hummel
marv
meister
root}
|
Es wird also nur USER eingerückt. Der Rest bleibt links.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Warum rufst du mysql mit sudo auf? Brauchst du die Ausgabe noch für was anderes oder reicht es das formatiert auszugeben?
mysql -u $name -p$password -e "SELECT USER FROM mysql.user;" | sed 's/^/\t/;1 s/^/\{/;$ a\}'
|
marv85
(Themenstarter)
Anmeldungsdatum: 9. Januar 2019
Beiträge: 43
|
Vielen dank für die schnelle Antwort. Mein Fehler... ☺ Sudo ist zur Gewohnheit geworden. 😬
Könntest du mir erklären was die Abkürzungen machen. Vieleicht hast du auch einen guten Link?
Das muss ich mir mal genauer anschauen.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Also die Ausgabe wird an sed (im Wiki-Artikel werden gängige Konstrukte wie Ersetzungen gezeigt, wenn du es ausführlicher haben willst, schau dir z.B. mal https://tty1.net/sed-tutorium/sed-tutorium.pdf an) weitergeleitet, das führt drei Operationen (die sind jeweils mit einem Strichpunkt voneinander abgetrennt) durch:
s/^/\t/ sort dafür, dass am Anfang jeder Zeile ein \t (Tabulator) eingefügt wird (genau genommen ist das eine Ersetzung, bei der ^ auf den Zeilenanfang matcht)
1 s/^/\{/ fügt in der ersten Zeile (daher die 1) am Anfang eine öffnende geschweifte Klammer ein
$ a\} hängt nach der letzten Zeile ($) eine schließende geschweifte Klammer in einer neuen Zeile an.
|
marv85
(Themenstarter)
Anmeldungsdatum: 9. Januar 2019
Beiträge: 43
|
Ok verstehe. Sehr cool danke.
Die Ausgabe ist fast perfekt. Ein Tap in sed hat vermutlich ein Zeichen weniger. Soll bedeuten das der Text noch nicht genau unter dem Rest steht. Aber das Leerzeichen in sed finde ich ....
Danke nochmal.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Es ist vermutlich einfacher, das Abfrageergebnis von MySQL so zu ändern, dass jedem Wert der Spalte "USER" ein Tab vorangestellt wird. Hast Du das mal versucht?
|
marv85
(Themenstarter)
Anmeldungsdatum: 9. Januar 2019
Beiträge: 43
|
Es ist vermutlich einfacher, das Abfrageergebnis von MySQL so zu ändern, dass jedem Wert der Spalte "USER" ein Tab vorangestellt wird. Hast Du das mal versucht?
Ich glaube ich weiß worauf du hinaus willst aber deine Aussage ist genau das was sed doch macht oder?
Du meinst aber vermutlich das man gleich in mysql alles eistellt...?
Oder?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
| 'SELECT "\t", user FROM mysql.user'
|
Ob der Tab richtig interpretiert wird weiß ich nicht. Wenn es die erste Spalte ist tun es wohl auch 8 Leerzeichen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
user_unknown schrieb: | 'SELECT "\t", user FROM mysql.user'
|
Da hast Du eine unbenannte Spalte mit einem konstanten Wert eingeführt. Ich meinte | SELECT CONCAT("\t", user) as user FROM mysql.user
|
Ob der Tab richtig interpretiert wird weiß ich nicht.
Wird er.
Wenn es die erste Spalte ist tun es wohl auch 8 Leerzeichen.
Jo.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
rklm schrieb: Da hast Du eine unbenannte Spalte mit einem konstanten Wert eingeführt. Ich meinte | SELECT CONCAT("\t", user) as user FROM mysql.user
|
Ob der Tab richtig interpretiert wird weiß ich nicht.
Wird er.
Wenn es die erste Spalte ist tun es wohl auch 8 Leerzeichen.
Jo.
Ja, das hätte den Vorteil, dass da kein Komma o.ä. zwischen den Spalten ausgegeben wird, oder keine zwei Tabs als Separator noch einen, oder welchen?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
user_unknown schrieb:
Ja, das hätte den Vorteil, dass da kein Komma o.ä. zwischen den Spalten ausgegeben wird, oder keine zwei Tabs als Separator noch einen, oder welchen?
Der Tab ist ein Tab und bleibt es auch. Man kann den Trenner ja ändern (von der Manpage):
the result is presented in tab-separated format. The output format can be changed using command options.
Und man erhält keine extra Überschrift, weil es kein zusätzliches Feld gibt. Übrigens müsste Deine Lösung noch einfacher so gehen, denn es wird ja bereits ein Tab als Trenner ausgegeben: | SELECT '', user FROM mysql.user
|
☺
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
rklm schrieb: Und man erhält keine extra Überschrift, weil es kein zusätzliches Feld gibt. Übrigens müsste Deine Lösung noch einfacher so gehen, denn es wird ja bereits ein Tab als Trenner ausgegeben: | SELECT '', user FROM mysql.user
|
☺
Wegen der Überschrift dann vielleicht
| SELECT '' AS '', user FROM mysql.user
|
Die Details von mySql sind mir aber nicht vertraut, und ich habe hier keine Installation, um das zu testen.
|
marv85
(Themenstarter)
Anmeldungsdatum: 9. Januar 2019
Beiträge: 43
|
Hallo ihr zwei. Habe mal eure Varianten getestet:
| SELECT CONCAT("\t", user) as user FROM mysql.user;
+----------+
| USER |
+----------+
| hummel |
| marv |
| meister |
+----------+
|
und
| SELECT '' AS '', user FROM mysql.user;
+--+----------+
| | USER |
+--+----------+
| | hummel |
| | marv |
| | meister |
+--+----------+
|
oder
| SELECT '', user FROM mysql.user;
+--+----------+
| | USER |
+--+----------+
| | hummel |
| | marv |
| | meister |
+--+----------+
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
mysql unterscheidet, ob es auf stdout schreibt oder über eine Umleitung/Pipe Daten ausgibt (in dem Fall lässt es die gezeichnete Tabelle weg) - und du musst ja eh noch die geschweiften Klammern drum herum basteln, also kannst du die Ausgabe von deinem der letzen beiden Ansätze an sed, awk oder ein anderes Programm per Pipe weiterleiden, das das für dich erledigen kann.
|
marv85
(Themenstarter)
Anmeldungsdatum: 9. Januar 2019
Beiträge: 43
|
So ... Ich habe mich nun für das beste entschieden. Vielen vielen Dank euch dreien. Das hat mir sehr geholfen und ich habe viel gelernt. Am Wochenende habe ich mich mit sed angefreundet und was noch viel besser ist .... habe mir ein Buch über Shell-Programmierung geholt. Das begeistert mich jetzt schon !
Nochmal vielen dank.
|