Sqlite3 измельчает/сокращает/сокращает мои текстовые столбцы

У меня есть значения, которые обрезаются и хотели бы отображать полные значения.

Sqlite3 -column -header locations.dbs "
select n.namelist, f.state, t.state
from names n
left join locations l on l.id = n.id
left join statenames f on f.st = l.st
left join statenames t on t.st = l.stto
where n.timing > 200601 and count(n.timing)<=15"

Что дает мне

name        From State   To State  
----------  -----------  ----------
Jack        Connecticut  Louisiana 
Jeff Danie  New Hampshi  New Hampsh

Имена усекаются до 10 символов или длина первой строки данных, в зависимости от того, что больше. Как я могу остановить это, не делая столбцы больше, чем они должны быть?

Спасибо

Ответ 1

Кажется, что нет возможности сделать это автоматически, но вы можете использовать команду .width для ручного указания ширины столбцов.

Смотрите здесь (найдите на странице .width).

Ответ 2

вы могли бы просто использовать столбец (команда unix) следующим образом:

sqlite3 -list -separator "|" -header db.dbs "Select ...." | column -t -s "|"

-list и -separator могут быть опущены, поскольку они по умолчанию

Ответ 3

Развернув ответ zuloo, можно использовать интерактивное приглашение и также иметь автоматическую ширину столбцов.

Помимо column вам также понадобится rlwrap (sudo apt-get install rlwrap, если вы на Ubuntu). Вы запускаете его следующим образом:

rlwrap -a -N -c -z pipeto sqlite3 -header locations.dbs

Или вы можете поместить псевдоним в свой .bashrc или похожий:

alias sqlite="rlwrap -a -N -c -z pipeto sqlite3 -header"

В консоли sqlite вы можете выполнить свой запрос следующим образом:

select * from names; | column -n -t -s '|'

Или, чтобы сделать это лучше, поместите script где-нибудь в $PATH:

#!/bin/bash
column -n -t -s '|'

Скажем, он называется pp, не забудьте сделать его исполняемым с помощью chmod u+x pp. Затем вы можете использовать интерактивное приглашение следующим образом:

select * from names; | pp

Ответ 4

Я действительно искал решения для той же самой проблемы, и я нашел это обходное решение:

sqliteresult=`sqlite3 -header -list $SQLITE_FILE "SELECT * ..." | tr "\\n" ";"`
sqliteresult="${sqliteresult/;/;-----------------------------;}"
sqliteresult="${sqliteresult//;/\n}"
sqliteresult="${sqliteresult//|/\t|\t}"
echo -e $sqliteresult

Надеясь, что это помогает:)

~ Stéphane

Ответ 5

Вот еще один способ отформатировать несколько таблиц и показать rowid в хорошем формате.

#/usr/bin/env bash

cli_opts="-header"

for table in "table1" "table2"; do
    select="select rowid as ' ', * from $table;"
    #echo "$select"
    echo "$table"
    sqlite3 $cli_opts database.db "$select" | column -t -s "|"
    echo -e '\n'
done