decimal value
다음 명령을 사용하여 a를 a로 변환합니다 time value
.
echo "1.5" | awk -F'.' '{printf $1 ":" "%.0f", $2 / 100 * 60}'
산출:1:3
awk
출력에 후행 0을 추가하여 다음을 얻으려면 어떻게 해야 합니까 1:30
?
답변1
뒤에 0을 추가하는 것은 좋은 접근 방식이 아니라고 생각합니다. 입력으로 예상되는 출력을 생성할 수 있지만 1.5
다른 입력에 대한 일반적인 솔루션이 필요한 경우 이 방법이 제대로 작동하지 않을 수 있습니다.
더 좋은 방법은 정수 부분과 소수 부분을 나누는 것이 아니라 분을 사용하고 /
and %
연산자를 사용하여 올바른 값을 계산하는 것입니다.시간과 분, 예를 들어:
awk '{printf "%d:%02d", ($1 * 60 / 60), ($1 * 60 % 60)}' <<< 1.5
# prints 1:30
awk '{printf "%d:%02d", ($1 * 60 / 60), ($1 * 60 % 60)}' <<< 1.50
# prints 1:30
awk '{printf "%d:%02d", ($1 * 60 / 60), ($1 * 60 % 60)}' <<< 1.7
# prints 1:42
awk '{printf "%d:%02d", ($1 * 60 / 60), ($1 * 60 % 60)}' <<< 1.05
# prints 1:03
음수 값을 처리하려면 다음 abs
함수를 도입할 수 있습니다.
awk 'function abs(v) {return v < 0 ? -v : v}
{printf "%d:%02d", ($1 * 60 / 60), ($1 * 60 % 60)}' <<< -1.7
# prints -1:42
답변2
소수점 이하 자릿수가 몇 개인지 모르기 때문에 100으로 나누어야 하는지도 모릅니다. @janos가 정답을 가지고 있지만 소수점 분할을 고집한다면 소수 부분을 다시 소수점으로 변환해야 합니다.
echo 1.5 | awk -F'.' '{printf "%d:%02d\n", $1, ("0."$2) * 60}'
"0."$2
문자열 연결로 생성된 문자열 "0.5"입니다.
그런 다음 숫자 60을 곱하여 분 수를 구합니다.
또는 자릿수에 따라 사용할 제수를 찾을 수 있습니다.
awk -F'.' '{printf "%s\t%d:%02d\n", $0, $1, $2 / 10**length($2) * 60}' << END
1
1.5
1.75
1.6666667
END
1 1:00
1.5 1:30
1.75 1:45
1.6666667 1:40
그러나 이 두 가지를 수행하지 마십시오.