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

相关内容