如何更改此文件
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,这样我们就不会重复该数字(这可以处理诸如 335
、339
、35 等连续行的情况0
,不重复 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
关于linux - 在这种情况下如何使用 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25726941/