バージョンを保存しているテキスト ファイルがあります:
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