n-1 数を取得する方法

n-1 数を取得する方法

バージョンを保存しているテキスト ファイルがあります:

1.0
2.0
3.0
4.0
5.0

等々。

たとえば、4.0入力として与えて、3.0出力として取得する方法が必要です。何千ものバージョンがあることに注意してください。

つまり、バージョン番号を指定して、前のバージョンの番号を取得したいのです。したがって、 を指定すると9.0、 が取得されます8.0

私は試した

  sed '1!G;h;$!d' test.txt 

しかし、これはすべての数字を印刷します。

答え1

これをbcGNU bc マニュアルbc)。算術式を渡してbc評価し、結果を返すことができます。例:

echo '9.0 - 1' | bc -l

このコマンドは8.0結果として返されます。

ここで、バージョン番号がファイルに含まれていると仮定しますversion.txt。例:

echo '9.0' > version.txt

次に、次のコマンドを実行します。

echo "$(cat version.txt) - 1" | bc -l

出力は次のようになります8.0。あるいは、次のようなファイルにバージョン番号のリストがあるとしますversions.txt

1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0

次のようなファイルを作成できます:

for i in {1..10}; do echo "${i}.0" >> versions.txt; done

この場合、bcwhile ループ内で使用できます。

while read line; do echo "${line}-1" | bc -l; done < versions.txt

これにより、次の出力が生成されます。

0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0

あるいは、バージョン番号から整数部分を抽出し、 を使用してbash計算を実行することもできます。この操作には、任意の数のテキスト処理ツールを使用できます (例grep: sed、、awkなど)。以下は、コマンドの使用例ですcut

echo "$(( $(echo '9.0' | cut -d. -f1) - 1)).0"

これは8.0出力として生成されます。これを while ループに入れると、次のようになります。

while read line; do \
    echo "$(( $(echo ${line} | cut -d. -f1) - 1)).0";
done < versions.txt

関連情報