我有一個保存版本的文字檔:
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