너비에 대한 awk printf 숫자를 반올림합니다.

너비에 대한 awk printf 숫자를 반올림합니다.

나는해야한다인쇄 기능숫자이지만 너비와 반올림이 지정되어 있습니다(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) }"

이것을 깨닫지 못하면 미묘하지만 성가신 오류가 발생할 수 있습니다.

관련 정보