출력 표시 전에 이름 헤더로 구분선을 그리는 방법

출력 표시 전에 이름 헤더로 구분선을 그리는 방법

사용자 이름과 부서를 표시하는 스크립트를 작성했는데 작동합니다. 또한 필요에 따라 구분선을 그리고 열에 이름 헤더를 할당하려고 합니다. 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:      [email protected]
        Phone:       09999999999
        Internal #:  
        Ext:         4848
        Cell:        8777880559
        Fax:            -
        Building:    NOIDA 03
        Floor:       03
        Room:        3.3.109

답변1

줄이 넓어서 printf "%-50s : %10s\n" "$DATA2" "$DATA1"총 63자(공백 및 공백 포함 :)가 있음을 알 수 있습니다. 그래서 우리는 함께 묶고 싶습니다 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

관련 정보