我使用以下命令将 a 转换decimal value
为 a time value
:
echo "1.5" | awk -F'.' '{printf $1 ":" "%.0f", $2 / 100 * 60}'
Run Code Online (Sandbox Code Playgroud)
输出: 1:3
我怎样才能awk
在输出中添加一个尾随零,这样我就会得到:1:30
?
我不认为添加尾随 0 是一个好方法。它可能会为1.5
作为输入产生预期的输出,但如果您需要其他输入的通用解决方案,这种方法可能不会很好地工作。
更好的方法是不拆分整数部分和小数部分,而是处理分钟,使用/
和%
运算符计算正确的小时和分钟,例如:
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
Run Code Online (Sandbox Code Playgroud)
要处理负值,您可以引入一个abs
函数:
awk 'function abs(v) {return v < 0 ? -v : v}
{printf "%d:%02d", ($1 * 60 / 60), ($1 * 60 % 60)}' <<< -1.7
# prints -1:42
Run Code Online (Sandbox Code Playgroud)