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 发行版的软件包中,所以我不确定它的便携性如何。
还有两点需要注意:
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)
这将对输入文件|进行分栏,添加一个字符来包围每一列。
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)