[gelöst] bash script: Steuerzeichen für Zeilensprung bei Extraktion von sqlite-Datenbank

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ropri8
Beiträge: 85
Registriert: 22.02.2008 08:37:56

[gelöst] bash script: Steuerzeichen für Zeilensprung bei Extraktion von sqlite-Datenbank

Beitrag von ropri8 » 08.04.2024 08:10:45

Hallo!
Ich hab' ein Problem mit einem Script bei der Formatierung der Daten einer sqlite-Datenbank-Abfrage.
Also von der Command-Line-Shell passt noch alles; Jede Datenbankzeile hat ihre eigene Zeile in der Ausgabe:

Code: Alles auswählen

sqlite> SELECT * FROM tl_time WHERE time_entry_id < '5006';
5000|1654567890|1654767890|6001|1000|501|3|AA1
5001|1654597890|1655767890|11111|1000|509|3|EE1
5002|1653741463|1653741800|120|1000|508|5|YMY
5003|1653741465|1653741477|67375|1000|504|1|KE2
5004|1653741466|1653741497|78930|1000|508|4|P8P
5005|1653741467|1653741551|4400|1000|512|3|QMT
So sieht nun das Script aus:

Code: Alles auswählen

#! /bin/bash
tid=$(sqlite3 'kk.db' <<EOF
SELECT * from tl_time WHERE time_entry_id < '5006';
.quit
EOF
     )
echo -e $tid
und so die Ausgabe vom Script:

Code: Alles auswählen

an@olinuxinolime2:~$ ./fo-test
5000|1654567890|1654767890|6001|1000|501|3|AA1 5001|1654597890|1655767890|11111|1000|509|3|EE1 5002|1653741463|1653741800|120|1000|508|5|YMY 5003|1653741465|1653741477|67375|1000|504|1|KE2 5004|1653741466|1653741497|78930|1000|508|4|P8P 5005|1653741467|1653741551|4400|1000|512|3|QMT
an@olinuxinolime2:~$
Es fehlt also scheinbar das \n Steuerzeichen nach jeder Datenzeile; deshalb hab' ich mir gedacht, ich werd's im Script explizit angeben:
-> Zeile mit . separator in Script eingefügt:

Code: Alles auswählen

#! /bin/bash
tid=$(sqlite3 'kk.db' <<EOF
.separator "|" "\n"
SELECT * from tl_time WHERE time_entry_id < '5006';
.quit
EOF
    )
echo -e $tid
und so sieht dann die Ausgabe aus:

Code: Alles auswählen

an@olinuxinolime2:~$ ./fo-test
5000|1654567890|1654767890|6001|1000|501|3|AA1 5001|1654597890|1655767890|11111|1000|509|3|EE1 5002|1653741463|1653741800|120|1000|508|5|YMY 5003|1653741465|1653741477|67375|1000|504|1|KE2 5004|1653741466|1653741497|78930|1000|508|4|P8P 5005|1653741467|1653741551|4400|1000|512|3|QMT
an@olinuxinolime2:~$
Es wird also wieder kein "Newline" gemacht, sondern irgendwas, was in der Ausgabe als Leerzeichen angezeigt wird; wie bekomme ich den Zeilensprung in die Variable? Hat wer eine Idee?
Zuletzt geändert von Meillo am 08.04.2024 09:27:21, insgesamt 1-mal geändert.
Grund: als geloest markiert

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: bash script: Steuerzeichen für Zeilensprung bei Extraktion von sqlite-Datenbank

Beitrag von JTH » 08.04.2024 08:14:33

Du musst die Variable dort, wo sie benutzt wird, quoten. Sonst wird jeder Zeilenumbruch, der dort tatsächlich enthalten ist, im Rahmen des sogenannten Word splittings (zum Nachlesen) verloren gehen:

Code: Alles auswählen

echo -e "$tid"

Um viele ähnliche Probleme in der Shell zu vermeiden, solltest du Variablen immer, immer so quoten. Es gibt nur wenige Stellen, wo das nicht sinnvoll oder gar kontraproduktiv ist.
Manchmal bekannt als Just (another) Terminal Hacker.

ropri8
Beiträge: 85
Registriert: 22.02.2008 08:37:56

Re: bash script: Steuerzeichen für Zeilensprung bei Extraktion von sqlite-Datenbank

Beitrag von ropri8 » 08.04.2024 09:16:39

Danke JTH - du bist ein Schatz;
Was hab' ich nur rumprobiert, um diesen verdammten Zeilensprung mit dem Script zu bewerkstelligen - ich denke es waren mehr als 5 Stunden ....
DANKE!

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash script: Steuerzeichen für Zeilensprung bei Extraktion von sqlite-Datenbank

Beitrag von Meillo » 08.04.2024 09:26:56

ropri8 hat geschrieben: ↑ zum Beitrag ↑
08.04.2024 09:16:39
Was hab' ich nur rumprobiert, um diesen verdammten Zeilensprung mit dem Script zu bewerkstelligen - ich denke es waren mehr als 5 Stunden ....
Du kannst gerne naechstes Mal schon nach einer Stunden rumprobieren hier im Forum fragen. ;-)
Use ed once in a while!

Antworten