Форматирование таблицы со столбцами и строкой в ​​bash printf - PullRequest
0 голосов
/ 03 апреля 2020

Ниже приведен вывод, сгенерированный несколькими выражениями awk / grep, которые я сохранил в переменных. Затем я пытаюсь построить таблицу для информации из этих переменных. Когда у меня есть одно значение для всех моих переменных, все работает, и таблица показывает хорошо отформатированный, но с несколькими значениями в этих переменных моя таблица портится. Я не знаю, как это правильно выразить.

Отношение между столбцами 1 и 2 столбца - это отображение 1: 1 в последовательном порядке, потому что именно так они хранятся в соответствующих переменных.

echo $tl_user_emails
mapping-aws-dev@team.com jhon@team.com
echo $tl_user_nmspcs
test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e test-60cb4076-9280-4cf9-bb34-9f9e4ac8bd20

printf "\n\n test User Namespaces on node running pods: \n%s" "$tl_user_nmspcs"
printf "\n\n test users running pods on this node:  \n%s\n\n" "$tl_user_emails"
printf "\n${yellow}${bold}%5sTest User Email${creset}${normal}%15s${yellow}${bold}%5sTest User Namespace${creset}${normal}%23s\n" " " "|" " " "|"
printf "%s %16s|%s%5s|\n" "$tl_user_emails" " " "$tl_user_nmspcs" " "
test User Namespaces on node running pods:
test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e
test-60cb4076-9280-4cf9-bb34-9f9e4ac8bd20




test users running pods on this node:
mapping-aws-dev@team.com
jhon@team.com


Above test pods info on this node: node1

output:
     Test User Email                |     Test User Namespace                      |
mapping-aws-dev@team.com
jhon@team.com.                      |test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e
test-60cb4076-9280-4cf9-bb34-9f9e4ac8bd20   |
expected output:

     Test User Email                |     Test User Namespace                  |
mapping-aws-dev@team.com            |                                          |
jhon@team.com.                      |test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e |
                                    |test-60cb4076-9280-4cf9-bb34-9f9e4ac8bd20 |
                                    ||

1 Ответ

0 голосов
/ 03 апреля 2020

Попробуйте:

#!/bin/bash

yellow=$(tput setaf 3)
bold=$(tput bold)
creset=$(tput rmso)
normal=$(tput sgr0)

tl_user_emails='mapping-aws-dev@team.com
jhon@team.com'
tl_user_nmspcs='test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e
test-60cb4076-9280-4cf9-bb34-9f9e4ac8bd20'

printf "\n${yellow}${bold}%5sTest User Email%16s${creset}${normal}|${yellow}${bold}%5sTest User Namespace%18s${creset}${normal}|\n" # all args after format are empty strings by default

declare -a emails
declare -a namespaces

for e in $tl_user_emails; do emails+=($e); done
for n in $tl_user_nmspcs; do namespaces+=($n); done

format="%-36s|%-42s|\n"

i=0
for e in ${emails[@]}; do
  printf "$format" "$e" "${namespaces[((i++))]}"
done

В качестве результата выдает (с желтым цветом и жирным шрифтом, где это необходимо):


     Test User Email                |     Test User Namespace                  |
mapping-aws-dev@team.com            |test-2d7dbabf-f8cc-4c0b-af3b-80db52d2257e |
jhon@team.com                       |test-60cb4076-9280-4cf9-bb34-9f9e4ac8bd20 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...