Como desenhar uma Linha Divisória com o Nome do Título antes da exibição da saída

0

Eu escrevi um script que exibe Nome e departamento do usuário e que funciona. Além disso, estou tentando desenhar uma linha divisória com o título do Nome atribuído às colunas conforme necessário. Eu estou tentando fazer isso com printf mas de alguma forma não é capaz de obtê-lo a partir de agora .. qualquer ajuda será apreciada ..

abaixo é o script e resultado esperado ..

#!/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

Estou tentando encontrar uma maneira de desenhar uma linha com os Títulos antes que a saída seja exibida como abaixo do esperado:

  Name                                         Department

----------------------------------------------- ---

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

Just for more how to know on the command part..

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:      [email protected]
        Phone:       09999999999
        Internal #:  
        Ext:         4848
        Cell:        8777880559
        Fax:            -
        Building:    NOIDA 03
        Floor:       03
        Room:        3.3.109
    
por krock1516 19.01.2017 / 04:54

1 resposta

2

Você tem printf "%-50s : %10s\n" "$DATA2" "$DATA1" , o que me diz que no total você terá uma linha de 63 caracteres (incluindo espaços e : ). Assim, vamos querer printf "%63s" string. A abordagem simples é imprimir espaços e depois convertê-los todos em - da mesma forma

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

Nós certamente poderíamos usar a abordagem mais simples , mas é específica de bash . Podemos, no entanto, modificá-lo ligeiramente:

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

Isso funcionará em qualquer shell e sistema que tenha seq instalado.

Assim, imprima o cabeçalho antes de entrar no loop. Por exemplo, aqui está um caso muito simples:

$ 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
    
por 19.01.2017 / 05:02

Tags