如何更改此文件
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
的长度,然后当我们处理缺失范围时(当a
与i - 1
相同时)增加a,因此我们不t复制该数字(这可以处理诸如335
,339
,350
之类的连续行,而无需复制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