おそらくカンマまたはタブで区切られた入力を想定して、適切にパディングされた一連の列をstdoutに表示したいので、そうでなければ乱雑に表示される列情報を簡単にスキャンできます。
私はtroff
ベースのソリューションを試しましたが、単純なデモは機能しましたが、コマンドに実際の入力を供給すると、奇妙なエラーが発生しました。私は現在sed
ベースの 方法 かなり遅いハック...
編集する:column
は非常に便利なツールですただし私が列に持っていれば本当に素晴らしいでしょう、たとえば、パイプ文字(|
)それらの間で、それらが空間に「浮いている」ように見えず、それぞれがどこから始まるかを簡単に区別できます。
PS。この投稿のタイトルは、「ASCIIアートテーブル」ではなく、「ASCII「テーブル」」を読むために使用されていました。混乱を取り除くために編集されました。
CSVファイルを想定すると、次のようにcolumn(1)
を使用できます。
column -ts, your_file
これは私のDebianディストリビューションのbsdmainutils
パッケージに含まれているので、どれだけ移植可能かわかりません。
注意すべきもう2つの点:
a,b,"c,d"
3列ではなく4列として。表形式データがpythonで何らかの方法で読み取られる場合(この例では、Pandas moduleを含むcsvファイルを読み取る場合)、 "tabulate"モジュールは非常に便利でシンプルです。
import pandas
from tabulate import tabulate
data = pandas.read_csv('/tmp/foo.csv', index_col=0)
print(tabulate(data, headers=data.columns, tablefmt="grid"))
これは素晴らしい出力を与えます:
+-----+------+------+
| | A | B |
+=====+======+======+
| foo | 1 | 0.2 |
+-----+------+------+
| bar | 3.14 | 10.9 |
+-----+------+------+
さまざまなスタイルを作成できます
print(tabulate(data, headers=data.columns, tablefmt="fancy_grid"))
╒═════╤══════╤══════╕
│ │ A │ B │
╞═════╪══════╪══════╡
│ foo │ 1 │ 0.2 │
├─────┼──────┼──────┤
│ bar │ 3.14 │ 10.9 │
╘═════╧══════╧══════╛
これにより、入力ファイルが列化され、|
文字が各列を囲むように追加されます。
sed -e 's/^/| /' -e 's/,/,| /g' -e 's/$/,|/' inputfile | column -t -s,
サンプルの実行(すぐに利用できるコロン区切りファイルを使用):
$ 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 |