Команда MySQL из файла, работающего от удара / столбцы результатов, не выровненные

Мне удалось выполнить MySQL из командной строки удара, с запросами из файла, как это:

mysql -u root -p$(cat pass.txt) < file1.sql 

Со следующим результатом:

id      name    food    confirmed       signup_date     email   salary
1       John    Casserole       Y       2012-04-11      NULL    125.00
2       Tom     BBQ     Y       2012-04-18      NULL    50.00
3       Tina    Salad   Y       2012-04-10      NULL    200.25
4       Mike    Fish    N       2012-04-19      NULL    50.00
5       July    Cake    N       2012-04-29      NULL    300.00

Вся польза, работы команды, но существуют одна проблема: все выходные столбцы неправильно выравниваются, как Вы видите. Это все грязно. Обычно, когда у меня есть этот вид проблемы, я решаю с командой "TR", и я попробовал его как это:

mysql -u root -p$(cat pass.txt) < file1.sql  | tr -s " "

Но результатом является то же, нет никакого изменения. Кроме того, я не могу даже использовать "сокращение", управляют этим. Я попробовал:

mysql -u root -p$(cat pass.txt) < file1.sql  | cut -d " " -f2 

И тем не менее тот же вывод.Странно. Кто-либо может помочь мне? Как может выполнить MySQL от удара с запросами из файла, и хорошее выровняло формат в результате?Большое спасибо.

0
задан 28 November 2019 в 04:34

2 ответа

Вы ищете column команда

column -t file

В Вашем случае это, я думаю, должно работать:

mysql -u root -p$(cat pass.txt) < file1.sql  | column -t

Вывод:

id  name  food       confirmed  signup_date  email  salary
1   John  Casserole  Y          2012-04-11   NULL   125.00
2   Tom   BBQ        Y          2012-04-18   NULL   50.00
3   Tina  Salad      Y          2012-04-10   NULL   200.25
4   Mike  Fish       N          2012-04-19   NULL   50.00
5   July  Cake       N          2012-04-29   NULL   300.00
2
ответ дан 21 December 2019 в 23:47

При использовании нев интерактивном режиме (как в случае, где введенный читается через стандартный вход, из файла), mysql клиент представляет результаты запросов в разделенном от вкладки формате:

От man mysql:

   mysql is a simple SQL shell with input line editing capabilities. It
   supports interactive and noninteractive use. When used interactively,
   query results are presented in an ASCII-table format. When used
   noninteractively (for example, as a filter), the result is presented in
   tab-separated format. The output format can be changed using command
   options.

Поскольку разделители по умолчанию являются символами табуляции, а не пробелами, Вашим cut команда должна была также использовать значение по умолчанию tab разделитель:

mysql -u root -p$(cat pass.txt) < file1.sql  | cut -f2 

Если Вы хотите тот же вид симпатичной печати как в интерактивном режиме, можно указать это путем добавления -t или --table опция:

$ mysql -t -u root -p mysql <<< 'select Host,User,Select_priv from user;'
Enter password: 
+-----------+------------------+-------------+
| Host      | User             | Select_priv |
+-----------+------------------+-------------+
| localhost | root             | Y           |
| localhost | mysql.session    | N           |
| localhost | mysql.sys        | N           |
| localhost | debian-sys-maint | Y           |
+-----------+------------------+-------------+
0
ответ дан 21 December 2019 в 23:47

Другие вопросы по тегам:

Похожие вопросы: