나는해야한다인쇄 기능숫자이지만 너비와 반올림이 지정되어 있습니다(awk를 사용하세요!)
%10s
나는 이것을 가지고 있고 어떻게든 연결해야 %d
하지만 내가 하는 모든 일 때문에 결국 너무 많은 매개변수를 제공하게 됩니다(더 많은 열이 있기 때문입니다).
답변1
다음을 시도해 볼 수 있습니다.
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
서식 지정 옵션은 두 부분으로 구성됩니다.
3
: 출력이 3자로 채워짐을 나타냅니다..0f
: 출력에 정밀도가 없으며 반올림을 의미함을 나타냅니다.
에서 man awk
자세한 내용을 볼 수 있습니다.
width The field should be padded to this width. The field is normally padded
with spaces. If the 0 flag has been used, it is padded with zeroes.
.prec A number that specifies the precision to use when printing. For the %e,
%E, %f and %F, formats, this specifies the number of digits you want
printed to the right of the decimal point. For the %g, and %G formats,
it specifies the maximum number of significant digits. For the %d, %o,
%i, %u, %x, and %X formats, it specifies the minimum number of digits to
print. For %s, it specifies the maximum number of characters from the
string that should be printed.
답변2
형식 지정자를 사용하면 %f
(부동 소수점) 숫자가 지정한 방식으로 자동으로 반올림됩니다. 예를 들어 값을 정수로 반올림하려면 다음을 사용합니다.
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
더 많은 후행 숫자를 원하면 정밀도를 변경하십시오.
답변3
awk는 아래의 sprintf를 사용하고 편견 없는 반올림을 수행하므로 플랫폼에 따라 항상 반올림하려는 경우 다음과 같은 것을 사용할 수 있습니다.
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
이것을 깨닫지 못하면 미묘하지만 성가신 오류가 발생할 수 있습니다.