если у вас там команды с многострочным выводом, по типу файлов, то для того чтобы это вывести обычно нужно пройти два этапа:
первый, это построчное объединение файлов/переменных с нужным разделителем
второе, это уже непосредственный отформатированный вывод по указанному выше разделителю.
рассмотрим ваш пример с командой
hostnamectl
для построчного объединения можно использовать стандартную утилиту
paste
paste file1 file2
где вместо файлов подставим вывод наших команд
paste <(hostnamectl) <(hostnamectl)
но в таком виде оно просто сольёт строки, а нам их нужно как-то различать в одной строке, если внутри вывода команд не используется символ ';' то возьмём его в качестве разделителя, то есть нам нужно в конец file1(ну или вывода команды) добавить окончание в виде точки с запятой ';'
делается это просто с помощью того же awk
hostnamectl |awk '{print $0";"}'
в общем виде будет выглядеть так:
paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl)
то есть, по сути, мы получили структурированный текстовый формат по типу
CSV/
TSV с разделителем в виде ';'
а вывести подобное довольно просто, так как для этого есть много разных консольных утилит, начиная от стандартной линуксовой
column
paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl) | column -t -s';'
и заканчивая
внешней утилитой
csview с рамочками и блэкджеком:
paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl) | csview -H -d';'
хотя в последнем варианте можно сократить до
paste <(hostnamectl) <(hostnamectl) | csview -H --tsv
так как paste добавляет еще табуляцию как разделитель