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

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

我使用以下命令将 a 转换decimal value为 a time value

echo "1.5" | awk -F'.' '{printf $1 ":" "%.0f", $2 / 100 * 60}'

输出:1:3

我怎样才能awk在输出中添加尾随零,这样我就会得到:1:30

答案1

我不认为添加尾随 0 是一个好方法。它可能会为 as 输入生成预期的输出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

要处理负值,您可以引入一个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

但是,不要做这两件事。

相关内容