我已经设法从 bash 命令行运行 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
输出结果还是一样。很奇怪。谁能帮我一下?如何从 bash 运行 MySQL 并执行文件中的查询,并得到一个良好的对齐格式?非常感谢。
答案1
您正在寻找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
当以非交互方式使用时(例如,通过标准输入从文件读取输入),客户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 |
+-----------+------------------+-------------+