awk 형식의 시간 출력에 후행 0을 추가합니다.

awk 형식의 시간 출력에 후행 0을 추가합니다.

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

그러나 이 두 가지를 수행하지 마십시오.

관련 정보