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

使用できますbc(参照GNU 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

おすすめ記事