0

我在这里遇到了一个愚蠢的问题。这没什么大不了的,但是因为我几乎每天都有它,所以我正在寻找一种解决方法。

我正在处理一个大约有 250 张桌子的项目。我经常需要查看这些列表,但是当我启动“show tables;”时,MySQL 每行输出 1 列。

这是一个快速示例:

| contact                              |
| content_footer                       |
| content_footer_translation           |
| content_homepage                     |
| content_homepage_image               |
| content_homepage_translation         |

我想要的是能够通过自己定义 n 来将它显示在 n 列中,或者更好的是,应该以某种方式计算 n,以便行宽不会超过 X 个字符。

预期输出:

| contact                              | content_footer                       | content_footer_translation           |
| content_homepage                     | content_homepage_image               | content_homepage_translation         |

我不确定纯粹在 MySQL 中是否真的可以做到这一点,但如果你知道一个可以在 Bash 中做到这一点的不错的单线,那也很好:)

4

1 回答 1

1

试试这个:

mysql databasename -NBe 'show tables;' | fmt

这会将名称组合成合适长度的行。您可以使用-w标志来调整行长fmt。但是,它不会形成新的列。

构建列的解决方案如下:

set -- $(mysql databasename -NBe 'show tables') '' ''
while [[ $# -ge 3 ]]; do
    printf "| %-20s | %-20s | %-20s |\n" "$1" "$2" "$3"
    shift 3
done

为了便于阅读,它被写成五行,当然你也可以用分号把它写在一个逻辑行中。如果要调整列数,则必须在五个地方进行:空字符串的数量、循环测试、格式字符串、printf 参数和 shift 参数。如果要调整列宽,则必须在格式字符串中重复执行此操作。不涉及自动计算。

于 2012-09-27T12:46:49.110 回答