将尾随零添加到 awk 格式的时间输出

nat*_*ath 2 awk

我使用以下命令将 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

jan*_*nos 5

我不认为添加尾随 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)