シェルに3点浮動小数点数を追加

シェルに3点浮動小数点数を追加

次のコマンドを使用して、5.34.03番号を5.34.04に追加してみました。

$ awk '{print 5.34.03 + 0.0.1}'
5.340.030.1

期待される出力

5.34.13

私は多くの方法を試しました。許すしかし、成功しませんでした。

ベストアンサー1

Bashでは、IFSを使用して各バージョン文字列を分割し、その番号で配列を埋めることができます。次に、パラメータ拡張を使用して数値の長さを取得し、結果の数値を書式設定printfするために使用されます。

#! /bin/bash
v=5.34.03
a=0.0.1

IFS=.
v=($v)
a=($a)

shopt -s extglob
for ((i=0; i<${#v[@]}; i++)) ; do
    v[i]=${v[i]%%+(0)}
    a[i]=${a[i]%%+(0)}
    v_length=${#v[i]}
    a_length=${#a[i]}
    v[i]=${v[i]##+(0)}
    a[i]=${a[i]##+(0)}
    if (( v_length < a_length )) ; then
        length=$a_length
        (( v[i] *= 10 ** (a_length - v_length) ))
    else
        length=$v_length
        (( a[i] *= 10 ** (v_length - a_length) ))
    fi
    (( v[i] += a[i] ))
    v[i]=$(printf %0"$length"d ${v[i]})
done
IFS=.
echo "${v[*]}"

IFS=$' \t\n'

010などの数字は8進数で処理されるため、前後の0を処理する必要があります。

おすすめ記事