私は123.456789という数字を持っています.私の質問は、ドットの後にこれを小数点以下2桁に丸める方法です.sedを使用すると123.46のように見えますか?何か案は?あるいは、小数点以下 2 桁の残りを切り捨てる方法は、最終的に次のようになります: 123.45? 前もって感謝します!
15007 次
3 に答える
14
実際、sedはこのためのrghtツールではないので、awkを使用する方がよいでしょう。次のようなawkスクリプトを作成します。
echo 123.45567 | awk '{printf("%.2f\n", $1)}'
またはBASHprintfを使用する:
printf "%.2f\n" 123.45567
出力:
123.46
于 2012-05-25T12:03:10.733 に答える
5
切り捨ては、次のような方法で実行できます。
pax> echo hello 123.4567 goodbye | sed 's/\(\.[0-9][0-9]\)[0-9]*/\1/g'
hello 123.45 goodbye
これは基本的に、フォームの文字列を見つけ.dd[ddd...]
(ここでは数字)、全体を (括弧はビットをキャプチャするように機能します)d
だけに置き換えることによって機能します。.dd
.dd
単純なテキスト置換ではないため、四捨五入は少し難しくなります (次の桁が 5 桁以上の場合は、最後の桁を変更して 1 を追加する必要があります)。そのためには、もう少し適応性の高いツールに頼る必要があるかもしれません。
これを行う1つの方法(最善の方法ではないことは確かですが)は次のPerl
とおりです。
pax> echo hello 123.4567 9876.54321 goodbye | perl -ne '
@x = split;
for ($i = 0; $i <= $#x; $i++) {
if ($x[$i] =~ /^[0-9]*\.[0-9]+$/) {
$x[$i] = int ($x[$i] * 100 + .5) / 100;
};
print "$x[$i] ";
};
print "\n";'
hello 123.46 9876.54 goodbye
これは、目的のパターンに一致するすべてのフィールドで丸め操作を行いますが、述べたように、かなり醜いです - もっと良い方法があると確信しています (brian d foy、どこにいますか?)
于 2012-05-25T11:02:52.617 に答える
1
いずれにせよ、まだ誰も丸めを行うことができていないのでsed
、Python の例を次に示します。
$ echo "echo hello 123.4567 goodbye" | python -c "import sys, re
for l in sys.stdin:
print re.sub(r'\d*\.\d{3,}', lambda x: str(round(float(x.group()), 2)), l)"
echo hello 123.46 goodbye
2 を別のものに変更して、丸め精度を変更できます。
于 2012-05-25T12:12:07.090 に答える