在具有任意起始范围或从1开始的唯一顺序列表中打印丢失的数字
这个问题类似于我如何在Unix终端中的唯一和顺序列表中找到缺失的整数?。
不同之处在于,我想知道是否可以指定列表的起始范围,
我注意到了以下提供的解决方案:
awk'{for(i = p+1; i< $ 1; $ 1; i ++)print i} {p = $ 1}'file1
and
perl -ne'对$ a+1 .. $ _ -1说。 $ a = $ _'
file1如下:
5 6 7 8 15 16 17 20
运行两个解决方案,它给出以下输出:
1 2 3 4 9 10 11 12 13 14 18 19
请注意,输出从1开始打印。
问题是如何传递任意启动/最低限度,如果什么都没有提供了,假设数字1是起始/最小数字?
9 10 11 12 13 14 18 19
是的,有时您会希望起始号码为1,但有时您将起始数字作为列表中最小的数字。
This question is similar to How can I find the missing integers in a unique and sequential list (one per line) in a unix terminal?.
The difference being is that I want to know if it is possible to specify a starting range to the list
I have noted the following provided solutions:
awk '{for(i=p+1; i<$1; i++) print i} {p=$1}' file1
and
perl -nE 'say for $a+1 .. $_-1; $a=$_'
file1 is as below:
5 6 7 8 15 16 17 20
Running both solutions, it gives the following output:
1 2 3 4 9 10 11 12 13 14 18 19
Note that the output start printing from 1.
Question is how to pass an arbitrary starting/minimum to start with and if nothing is provided, assume the number 1 as the starting/minimum number?
9 10 11 12 13 14 18 19
Yes, sometimes you will want the starting number to be 1 but sometimes you will want the starting number as the least number from the list.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用
awk
脚本,稍作修改,然后将其传递给初始p
带有> -v
选项:开始/code>块初始化
p
至1,如果未指定或设置为0或负值。循环以p
而不是p+1
开始,最后一个块分配$ 1+1
p
(而不是$ 1
),当时且仅当p
$ 1 。假设默认值(1)是您想要的最小启动号。如果您想从0开始,甚至是从负数开始的,只需替换
开始{p = p&lt; 1?1:p}
bybegin oken {p =(p ==“ p ==”“”? 1:p)}
:You can use your
awk
script, slightly modified, and pass it an initialp
value with the-v
option:The
BEGIN
block initializesp
to 1 if it is not specified or set to 0 or a negative value. The loop starts atp
instead ofp+1
, and the last block assigns$1+1
top
(instead of$1
), if and only ifp
is less or equal$1
.This assumes that the default (1) is the minimum starting number you would want. If you would like to start from 0 or even from a negative number just replace
BEGIN{p=p<1?1:p}
byBEGIN{p=(p==""?1:p)}
:这些单线的轻微变化包括一个起点:
awk
perl
Slight variations of those one-liners to include a start point:
awk
perl
使用Raku(以前称为Perl_6)
样本输入:
样本输出:
这是在Raku中编码的答案,Raku是编程语言的Perl家族的成员。不,它没有解决OP的可定义起点的请求。取而代之的是上面的代码是一个通用解决方案,该解决方案计算输入的
min
imumint
并从那里计数,返回任何丢失的int
s uf-of- - 到输入的max
imumint
。真的需要用户定义的下限吗?尝试以下代码,该代码允许您设置
$ init
变量:有关说明和较短的代码(包括单线返回和/或返回而无需排序),请参见下面的链接。
https://stackoverflow.com/a/72221301/7270649
https://raku.org
Using Raku (formerly known as Perl_6)
Sample Input:
Sample Output:
Here's an answer coded in Raku, a member of the Perl-family of programming languages. No, it doesn't address the OP's request for a user-definable starting point. Instead the code above is a general solution that computes the input's
min
imumInt
and counts up from there, returning any missingInt
s found up--to the input'smax
imumInt
.Really need a user-defined lower limit? Try the following code, which allows you to set a
$init
variable:For explanation and shorter code (including single-line return and/or return without sort), see the link below.
https://stackoverflow.com/a/72221301/7270649
https://raku.org
不像我希望的那样优雅:
not as elegant as i hoped :