如何更改此文件

335
339
666665
666668


为了这个结果

335
336
337
338
339
666665
666666
666667
666668


解释:在两个具有相同长号的数字之间,它将把错过的数字按数字升序排列。非常感谢

最佳答案

我相信这是您想要的。

awk 'alen==length($1) {for (i=a;i<=$1;i++) print i}; {a=$1; alen=length(a); if (a==(i-1)) {a++}}'


alen(a的长度)与a$1之间的当前行循环的长度相同时,将打印出所有缺失值。

然后将a设置为新的$1,将alen设置为a的长度,然后当我们处理缺失范围时(当ai - 1相同时)增加a,因此我们不t复制该数字(这可以处理诸如335339350之类的连续行,而无需复制339)。

归功于@fedorqui的基本思想。

编辑:我相信这可以解决我在评论中指出的问题(我认为这也是@JohnB指出的问题):

awk '{f=0; if (alen==length($1)) {for (i=a;i<=$1;i++) print i} else {f=1}} {a=$1; alen=length(a)} a==(i-1){a++} f{print; a++}'


我觉得应该有一种更简单的方法来做到这一点,但目前我还没有看到。

再次编辑:我最终测试的输入文件为:

335
339
340
345
3412
34125
666665
666668

09-27 23:32