Мне удалось выполнить 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 от удара с запросами из файла, и хорошее выровняло формат в результате?Большое спасибо.
Вы ищете 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
При использовании нев интерактивном режиме (как в случае, где введенный читается через стандартный вход, из файла), 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 |
+-----------+------------------+-------------+