printfと変数とその値の間にドット「...」を追加する方法

printfと変数とその値の間にドット「...」を追加する方法

我々は以下の結果を得た。

catgh.log

 machine              status               
 =============================================================
 connection_ght 400
 pach_po 72
 timeout 311
 ping_agent 119675
 rt_machine 231
 ginco_snmp   14
 .
 .
 .
 .

使い方printf

 machine              status               
 =============================================================
 connection_ght..... 400
 pach_po............ 72
 timeout............ 311
 ping_agent......... 119675
 rt_machine......... 231
 ginco_snmp ........ 14

答え1

ヘアストラップに点線を追加し、printfprintfさに合わせてカットします。シェルから:

$ for x in a bbb cccccc ; do 
    printf '%.20s %s\n' "$x.................................." blah;
  done
a................... blah
bbb................. blah
cccccc.............. blah

存在するawk

$ printf "a 123\nbbbbbb 456\n" | 
    awk '{printf "%.20s %s\n", $1 ".....................", $2}'
a................... 123
bbbbbb.............. 456

存在する、%N.Ms窒素フィールドの最小幅です。中サイズ最大値。


最初のフラグメントを2番目のフラグメントに変換するには、次のようにします。

$ awk 'NR <= 2 {print; next} {printf "%.20s %s\n", $1 ".....................", $2}' < gh.log
machine              status               
=============================================================
connection_ght...... 400
pach_po............. 72
etc.

条件はNR <= 2 {print; next}最初の2行をそのまま渡し、残りは上記のように変換されます。これは、他の列などがないと仮定します。味に合わせて適応してください。


printfフィールドの幅は、その位置にaを置くと別々のパラメータとして提供される可能性があるため、次*のようにすることもできます。

printf '%s%.*s %s\n' "$x" $(( 20 - ${#x} )) "................................" blah

(変数の${#x}長さxawk

関連情報