如何更改此文件
335
339
666665
666668
到这个结果
335
336
337
338
339
666665
666666
666667
666668
解释:在两个长度相同的数字之间,它会将错过的数字推到数字升序。很多谢谢
答案 0 :(得分:6)
我相信这可以做你想要的。
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
)相同,因此我们不会复制该数字(这会处理335
,339
,350
等连续行的情况,而不会重复339
1}})。
为@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
答案 1 :(得分:3)
第一种方法是:
$ awk 'NR%2 {a=$1; next} $1>a {for (i=a;i<=$1;i++) print i}' file
335
336
337
338
339
666665
666666
666667
666668
它可以在您提出的问题中提供的信息和努力得到改善:)
NR%2 {a=$1; next}
由于NR
代表n
r
ecord(本例中为行数),如果NR不是多个,则NR%2
为1这样就将变量a
中的行值存储在奇数行中。然后,next
停止处理当前行。$1>a {for (i=a;i<=$1;i++) print i}
在其他情况下(偶数行),如果该值大于存储的值,则从该值循环到当前值,打印其间的所有值。