ユーザー名と部門を表示するスクリプトを作成しましたが、うまくいきます。また、必要に応じて区切り線を描画し、列に名前ヘッダーを割り当てようとします。 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