Как нарисовать линию Divider с названием названия перед отображением вывода

Я написал сценарий, который отображает имя и отдел пользователя, и это работает. Кроме того, я пытаюсь нарисовать разделительную строку с названием заголовка, присваиваемым столбцам по мере необходимости. Я пытаюсь сделать это с помощью printf, но как-то не могу получить его на данный момент .. любая помощь будет оценена.

ниже приведен сценарий и ожидаемый результат.

#!/bin/sh for names in `cat namefile`; do DATA1="`/grid/common/bin/cod -u $names | awk -F: '/Department/ {print $2}'`" DATA2="`/grid/common/bin/cod -u $names | awk -F: '/Name/ {print $2}'`" #printf '%*s\n' "${COLUMN'S:-$(tput cols)}" '' | tr ' ' - printf "%-50s : %10s\n" "$DATA2" "$DATA1" done bash-4.1$ sh Userdetail.sh Karn Kumar : TT, Infra, VM & India Manas . : TT, Infra, VM & India Pranjal Agrawal : TT, Infra, VM & India Rogen Mana : PP OPS-Brazil 

Я пытаюсь найти способ нарисовать линию с заголовками до того, как будет отображаться вывод, как показано ниже:

  Name Department 

————————————————–

 Karn Kumar : TT, Infra, VM & India Manas . : TT, Infra, VM & India Pranjal Agrawal : TT, Infra, VM & India Rogen Mana : PP OPS-Brazil 

Просто для более подробной информации о команде.

 bash-4.1$ /grid/common/bin/cod -u karn Name: Karn Kumar Title: IT -Staff Systems Engineer Department: TT, Infra, VM & India Mgr: KK LIN Mgr Login: ttlin E-Mail: karn@abc.com Phone: 09999999999 Internal #: Ext: 4848 Cell: 8777880559 Fax: - Building: NOIDA 03 Floor: 03 Room: 3.3.109 

One Solution collect form web for “Как нарисовать линию Divider с названием названия перед отображением вывода”

У вас есть printf "%-50s : %10s\n" "$DATA2" "$DATA1" , который говорит мне, что в итоге у вас будет 63-символьная широкая строка (включая пробелы и printf "%-50s : %10s\n" "$DATA2" "$DATA1" . Таким образом, мы захотим printf "%63s" строку printf "%63s" . Простой подход заключается в том, чтобы печатать пробелы, а затем преобразовывать их все в - так

 printf "%60s" " " | tr ' ' '-' 

Мы, конечно, могли бы использовать более простой подход , но он специфичен для bash . Мы можем, однако, немного изменить его:

 printf "=%.0s" $(seq 1 63) 

Это будет работать в любой оболочке и системе, на которой установлен seq .

Таким образом, напечатайте заголовок перед входом в цикл. Например, вот очень простой случай:

 $ cat ./print_header.sh #!/bin/bash # print header printf "%-50s : %10s\n" "Name" "Department" # print separator printf "=%.0s" $(seq 1 63) # insert a newline printf "\n" # and this is where your for loop would begin. # just for the sake of example, there's only one line printf "%-50s : %10s\n" "John Doe" "IT,Infra" $ ./print_header.sh Name : Department =============================================================== John Doe : IT,Infra 
  • Где исходный код реализации «scanf»?
  • Еще одна синтаксическая ошибка около неожиданного токена `('
  • Обработчик SIGINT работает только один раз
  • вывод printf в следующую строку
  • bash. Почему тип -a выполняет «$ (printf 'a')» и можно ли вернуть исходный псевдоним?
  • Почему printf игнорирует IFS при печати результата моего сценария?
  • Как printf округляет половину к первому знаку после запятой?
  • Довольно печатать в VIM?
  • Человеко-читаемые файлы с помощью printf
  • Выравнивание при печати серии записей
  • Как создать команду bash, которая создает вывод, который точно имитирует исходный текстовый файл, который можно вставить в оболочку bash, где включен histexpand?
  • Linux и Unix - лучшая ОС в мире.