사용자 이름과 부서를 표시하는 스크립트를 작성했는데 작동합니다. 또한 필요에 따라 구분선을 그리고 열에 이름 헤더를 할당하려고 합니다. 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