保存されたバージョンを含むテキストファイルがあります。
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
この場合、bc
whileループ内で使用できます。
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