Как выводить данные в терминале в табличном формате?
Мне необходимо выводить данные на подобие таблицы по типу:
Имя сетевого интерфейса MAC адрес Ip адрес
... ... ...
Как это можно написать в bash-скрипте?
Думал через echo сразу несколько команд выполнить и через grep и awk вывести, но не понял как сразу несколько и чтобы они были в табличном формате
Ответы (2 шт):
Автор решения: eri
→ Ссылка
Код
(
for iface in $(ls /sys/class/net/);
do
mac=$(cat /sys/class/net/$iface/address);
ips=$(ip addr show dev $iface |\
sed -r -n 's/^.*inet6?\s+([0-9a-f\.\:\/]*?)\s.*/\1/p' |\
tr '\n' ' ');
echo "$iface;$mac;$ips";
done;
) | column -t -s ';' -N "Имя сетевого интерфейса,mac адрес,Ip адрес" -W "Ip адрес"
Вывод
Имя сетевого интерфейса mac адрес Ip адрес
enp5s0 a8:a1:59:40:80:ee 192.168.117.56/24 fe80::37d5:e73c:248:f3b6/64
lo 00:00:00:00:00:00 127.0.0.1/8 ::1/128
virbr0 52:54:00:02:6b:79 192.168.122.1/24
Автор решения: ipatev_nn
→ Ссылка
Так же можно воспользоваться программой printf
printf '%-25s%-20s%-20s\n'...
%-25s - Столбец длинною 25 символов с выравниванием по левому краю
printf '%-25s%-20s%-20s\n' "Имя сетевого интерфейса" "Ip адрес" "MAC адрес"
for device in /sys/class/net/* ;do
printf '%-25s%-20s%-20s\n' "${device/*\/}" \
"`ip -br a show ${device/*\/} | awk '{print $NF}'`" \
"`cat $device/address`"
done
Результат будет выглядеть так:
Имя сетевого интерфейса Ip адрес MAC адрес
ens192 192.168.1.1/22 00:50:56:a0:79:ad
lo 127.0.0.1/8 00:00:00:00:00:00