提问人:missway 提问时间:2/12/2022 最后编辑:missway 更新时间:2/12/2022 访问量:33
在备选排序数字之间设置固定的数字比例
Set a fixed numerical ration between alternative sorted numbers
问:
所以我正在处理一个由一行又一行的数字组成的大型文本文件, 下面只是一个简短的摘录,以帮助回答这个问题,但它甚至可以是一系列随机递增的数字,每行之间有各种数字间隙。
267
368
758
936
1248
1415
1739
1917
我正在寻找一种方法,从第 2 个和第 3 个数字开始,在每对数字之间设置一个固定的数字间隙。例如,100 惠斯特保持每对内的数字差异,但此差异可以是任何数字。
这样,如果将数值差距设置为 100,则上述示例将变为:
267
368
# gap of 100
468
646
# gap of 100
746
913
# gap of 100
1013
1191
有谁知道一个可能的行在 shell 脚本的终端中执行此操作。谢谢
答:
0赞
pmf
2/12/2022
#1
有点笨拙,但对于初学者来说,我想这就可以了。它读取数字列表(即以开头或类似),然后将其传递到其余部分。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+=$1)); echo $((m+=y-x)); done;
}
cat numbers.txt | addgaps 100
评论
0赞
missway
2/12/2022
我如何将参数化函数保存到我的系统中,如果它是一个过度的问题,我深表歉意,只是我过去真的很难找到一个易于理解的解释,所以我经常局限于寻找一行终端解决方案。这通常是限制性的
0赞
pmf
2/12/2022
@missway 这取决于您的用例(和您的系统设置)。当你使用时,一种方法是把它放在你的文件中,这样每次你打开一个新的 bash shell 时,它都会被获取。但是,如果您从脚本文件运行代码(而不是在终端的命令行上输入命令),那么将其放入相应的脚本文件中也就足够了。bash
~/.bashrc
0赞
missway
2/12/2022
非常感谢您,也感谢您抽出宝贵时间将您的答案扩展为更详细的解释,非常感谢
评论
267
368
369