Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在这种情况下如何使用Awk_Linux_Bash_Shell_Awk - Fatal编程技术网

Linux 在这种情况下如何使用Awk

Linux 在这种情况下如何使用Awk,linux,bash,shell,awk,Linux,Bash,Shell,Awk,如何更改此文件 335 339 666665 666668 为此, 335 336 337 338 339 666665 666666 666667 666668 解释:在两个长度相同的数字之间,它会将丢失的数字按升序排列。非常感谢第一种方法是: $ 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 它可以

如何更改此文件

335
339
666665
666668
为此,

335
336
337
338
339
666665
666666
666667
666668

解释:在两个长度相同的数字之间,它会将丢失的数字按升序排列。非常感谢第一种方法是:

$ 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代表行的记录编号,如果NR不是2的倍数,则NR%2是1。因此,它将变量a中的行的值存储在奇数行中。然后,next停止处理当前行。
$1>a{for i=a;i我相信这正是你想要的

awk 'alen==length($1) {for (i=a;i<=$1;i++) print i}; {a=$1; alen=length(a); if (a==(i-1)) {a++}}'
我觉得应该有一个更简单的方法来做到这一点,但我现在看不到

再次编辑:我最后测试的输入文件是:

335
339
340
345
3412
34125
666665
666668

它总是由两个相同长度的数字组成的块吗?到目前为止你试过什么?339和66666之间的记录呢?哦,相同的长度可能意味着相同length@YOU您希望的输出是否正常?我知道您希望打印66666 9,而文件包含66666 8。令人失望的是,由于询问了自编辑以来的问题,您没有做出任何更改t尝试自己解决这个问题。@您添加了一些信息。下次尝试添加一些尝试!实际上它需要进一步调整。如果最后一条记录是66666 8之后的66666 9,则不会打印。@anubhava true!只是在问题中添加了一条注释来澄清。鹰眼:我的意思是。在输入文件中339的正下方添加340,然后运行再次使用此脚本。@anubhava我正在编写一个更新,但现在我看到Etan Reisner刚刚发布了一个很好的解决方案。我假设输入是一对值,因此是NR%2。但是他的方法更通用,更适合于更通用的解决方案。+1对于他!+1可以添加1以打印不匹配的行,而无需增量。例如。第123行后接第1234行。@JohnB我不确定我是否完全遵循了这个建议,但它确实提出了一个问题。如果有一行给定长度的话,这个答案根本不会打印出来。@JohnB我想你可能是这个意思,但不能确定。问题是它会双重打印范围的开始和结束。
335
339
340
345
3412
34125
666665
666668