从 bash 运行的文件中的 MySQL 命令/结果列未对齐

从 bash 运行的文件中的 MySQL 命令/结果列未对齐

我已经设法从 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           |
+-----------+------------------+-------------+

相关内容