在备选排序数字之间设置固定的数字比例

Set a fixed numerical ration between alternative sorted numbers

所以我正在处理一个由一行一行的数字组成的大文本文件, 下面只是一个简短的摘录来帮助解决这个问题,但它甚至可以是一系列随机递增的数字,每一行之间都有各种数字差距。

267
368
758
936
1248
1415
1739
1917

我正在寻找一种方法来在从第二个和第三个数字开始的每第二对数字之间设置一个固定的数字差距。例如 100 惠斯特保持每对之间的数字差异,但这个差异可以是任何数字。

如果将数值差距设置为 100,则上述示例将变为:

267
368
#      gap of 100
468
646
#      gap of 100
746
913
#      gap of 100
1013
1191

有人知道在 shell 脚本的终端中执行此操作的可能的一种方式吗?谢谢

有点笨拙,但我想对于初学者来说,这就可以了。它从 stdin 中读取数字列表(即以 cat numbers.txt 等开头),然后将其通过管道传输到其余部分。

paste - - | {
        read -r x m;    echo $x;          echo $m
  while read -r x y; do echo $((m+=100)); echo $((m+=y-x)); done
}
267
368
468
646
746
913
1013
1191

解释:paste - -让我们一次读取两个数字,所以我们可以逐行读取(两个数字)。第一对原封不动地打印出来,但随后的对仅用作计算差异的基础,它被添加到一个 运行 变量上,该变量在每次迭代中也递增 100


这里重写为参数化函数,并且没有使用 paste:

addgaps() {
  read -r m; echo $m; read -r m; echo $m
  while read -r x; read -r y; do echo $((m+=)); echo $((m+=y-x)); done;
}
cat numbers.txt | addgaps 100