从表格数据创建 ASCII 艺术表

i33*_*36_ 13 command-line text-processing csv columns

考虑到逗号或制表符分隔的输入,我想向标准输出显示一系列适当填充的列,以便我可以轻松扫描列式信息,否则这些信息会显示得相当混乱。

我尝试过troff基于 - 的解决方案,虽然简单的演示已经奏效,但提供命令的实际输入会导致奇怪的错误。我目前求助于使用一个相当慢的sed基于方法的hack......

编辑column是一个非常有用的工具,但是如果我的列之间有一个管道字符 ( |) 这样它们就不会在空间中“漂浮”,我可以轻松区分每个列的开始位置,那就太棒了。

附注。这篇文章的标题用于阅读“ASCII“表格”,而不是“ASCII艺术表格”。编辑以尝试消除混淆。

Jos*_* R. 16

假设是 CSV 文件,您可以column(1)像这样使用:

column -ts, your_file
Run Code Online (Sandbox Code Playgroud)

这包含在bsdmainutils我的 Debian 发行版的软件包中,所以我不确定它的便携性如何。

还有两点需要注意:

  1. 上面的例子很简单;浏览手册页以获取有关如何格式化输出的更多详细信息。
  2. 它不适用于包含逗号的引用字段。即,它会认为a,b,"c,d"是四列而不是三列。


小智 7

如果以某种方式在 python 中读取表格数据(在此示例中使用 Pandas 模块读取 csv 文件),则“制表”模块非常有用且简单。

import pandas
from tabulate import tabulate

data = pandas.read_csv('/tmp/foo.csv', index_col=0)
print(tabulate(data, headers=data.columns, tablefmt="grid"))
Run Code Online (Sandbox Code Playgroud)

这给出了一个很好的输出:

+-----+------+------+
|     |    A |    B |
+=====+======+======+
| foo | 1    |  0.2 |
+-----+------+------+
| bar | 3.14 | 10.9 |
+-----+------+------+
Run Code Online (Sandbox Code Playgroud)

你可以制作不同的款式

print(tabulate(data, headers=data.columns, tablefmt="fancy_grid"))

?????????????????????
?     ?    A ?    B ?
?????????????????????
? foo ? 1    ?  0.2 ?
?????????????????????
? bar ? 3.14 ? 10.9 ?
?????????????????????
Run Code Online (Sandbox Code Playgroud)


Mar*_*ick 6

这将对输入文件|进行分栏,添加一个字符来包围每一列。

 sed -e 's/^/| /' -e 's/,/,| /g' -e 's/$/,|/' inputfile | column -t -s,
Run Code Online (Sandbox Code Playgroud)

示例运行(使用现成的冒号分隔文件):

$ head -4 /etc/passwd | tr : , | \
  sed -e 's/^/| /' -e 's/,/,| /g' -e 's/$/,|/' | column -t -s,

| root    | x  | 0  | 0  | root    | /root      | /bin/bash  |
| daemon  | x  | 1  | 1  | daemon  | /usr/sbin  | /bin/sh    |
| bin     | x  | 2  | 2  | bin     | /bin       | /bin/sh    |
| sys     | x  | 3  | 3  | sys     | /dev       | /bin/sh    |
Run Code Online (Sandbox Code Playgroud)