如何在第一个非零数字之前计算全零

时间:2015-12-04 00:46:53

标签: bash shell awk grep

这是问题所在:

echo -0.00092711066827 | grep -o 0

0
0
0
0
0

echo -0.00092711066827 | grep -o 0 | wc -l

5

但是我需要在第一个非零数字之前计算全零,在这种情况下,在数字9之前全部为零(例如,4个零)。知道如何计算所有这4个零加上第一个非零整数(在这种情况下它将是4个零加上9)也很好。

欢迎提示,

4 个答案:

答案 0 :(得分:2)

你可以这样做,

$ echo -0.00092711066827 | grep -o '^[^1-9]\+' | grep -o '0' | wc -l
4

答案 1 :(得分:2)

使用bash:

x='-0.00092711066827'
[[ $x =~ ([0.]+).* ]]
y="${BASH_REMATCH[1]//./}"
echo "${#y}"

输出:

4

答案 2 :(得分:1)

$ printf '%e\n' -0.00092711066827 | sed 's/^.\+e-//'
04

答案 3 :(得分:1)

两个shell解决方案(无外部程序):

s="-0.00092711066827"

a="${s%%[1-9]*}" ;                 # cut at the first non-zero digit.
a="${a//[^0]/}";                   # remove all non-zero characters.
echo "${#a}"                       # print the count of zeros.

b="$(LC_ALL=C printf '%e' "$s")"   # convert to Scientific notation.
echo "$((${b##*e-}+0))"            # convert exponent to number.