出力を表示する前に名前ヘッダーで区切り線を描画する方法

出力を表示する前に名前ヘッダーで区切り線を描画する方法

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

おすすめ記事