
decimal value
次のコマンドを使用してaをaに変換しますtime value
。
echo "1.5" | awk -F'.' '{printf $1 ":" "%.0f", $2 / 100 * 60}'
出力:1:3
awk
出力に末尾のゼロを追加して次のようにするにはどうすればよいですか1:30
?
答え1
後ろにゼロを追加することは良いアプローチではないと思います。入力として期待される出力を生成できますが、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
ただし、これら2つを実行しないでください。