修改文本文件,仅包含一个受约束的数字

修改文本文件,仅包含一个受约束的数字

我有一个文本文件 a.txt,其内容是 0 到 100 之间的数字。我需要一个命令来通过将数字增加 10 来修改 a.txt,但在最终结果必须小于 100 的约束下(即,如果数字达到大于 100 的值(例如 95+10=105),则它只会保持在 100)。

我还需要一个最多减少 10 的命令,但这样最终结果大于或等于 0,它应该是类似的。

我能做的是直接用 echo 修改文件,但这样我就可以用其他东西替换该数字(而不是添加到以前的数字)。

答案1

这将增加 10:

echo "$(awk '{x=$0+10;if(x>100)x=100; print x}' a.txt)" > a.txt

这将减去 10:

echo "$(awk '{x=$0-10;if(x<0)x=0; print x}' a.txt)" > a.txt

$0是在文件中读取的当前行的值,因此它会加/减 10,然后检查它是否在约束范围内。

感谢通配符的精彩评论,您可以在不使用临时文件的情况下完成此操作。

答案2

read bl <a.txt; echo "$((bl<90?bl+10:100))" >a.txt

...如果只有一行a.txt计算出小于或等于 100 的数字,则应该可以工作。如果a.txt在大多数 shell 中为空,将其设置为值 10,它也可以工作。相反的逻辑可以工作:

 read bl <a.txt; echo "$((bl<10?0:bl-10))"  >a.txt

相关内容