Как выводить данные в терминале в табличном формате?

Мне необходимо выводить данные на подобие таблицы по типу:

Имя сетевого интерфейса   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
→ Ссылка