如何得到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

在這種情況下,我們可以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執行算術。您可以使用任意數量的文字處理工具來執行此操作(例如grepsedawk, 等)。這是使用該命令的範例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

相關內容