Вы могли использовать PAM (UsePAM в sshd_config) и добавить
account required pam_access.so
к конфигурации PAM для ssh.
Затем можно определить политики доступа в /etc/security/access.conf
+ : john : 127.0.0.1 ::1
- : john : ALL
+ : ALL : ALL
(непротестированный)
Принимая файл CSV, можно использовать column(1)
как так:
column -ts, your_file
Это включено в bsdmainutils
пакет на моем распределении Debian, таким образом, я не уверен, насколько портативный это.
Еще две вещи отметить:
a,b,"c,d"
как четыре столбца не три.Этот будет columnate входной файл, добавляя a |
символ для окружения каждого столбца.
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 |
Если табличные данные каким-то образом читаются в python (в этом примере чтение csv-файла с помощью модуля Pandas), модуль "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 │
╘═════╧══════╧══════╛