우리는 다음과 같은 결과를 얻었습니다.
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
문자열 작업의 메모리 관리가 다소 성가시기 때문에 쉘 또는 .