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

머리끈에 점선을 추가 printf하고 printf길이에 맞춰 자릅니다. 셸에서:

$ 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질소필드의 최소 너비입니다.중간 사이즈최대값.


첫 번째 조각을 두 번째 조각으로 변환하려면 다음을 수행할 수 있습니다.

$ 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}처음 두 행을 있는 그대로 전달하고 나머지는 위와 같이 변환됩니다. 이는 다른 열 등이 없다고 가정합니다. 입맛에 맞게 적응하세요.


printf필드 너비는 해당 위치에 a를 넣으면 별도의 매개변수로 제공될 수 있으므로 *다음과 같이 수행할 수도 있습니다.

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

( ${#x}변수의 길이입니다 x.) 이는 문자열과 패딩을 별도로 유지하지만 awk문자열 작업의 메모리 관리가 다소 성가시기 때문에 쉘 또는 .

관련 정보