首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >求出数列的外部范围

求出数列的外部范围
EN

Stack Overflow用户
提问于 2013-11-09 20:51:52
回答 3查看 69关注 0票数 0

我有一列数字,例如:

2

3.

4.

5

8

9

10

我想输出类似于2-5和8-10的数字列。这似乎不应该那么困难,但我缺乏技巧。使用awk,我尝试创建一列差异,如下面所示,并使用它来捕获范围,但无法工作。

2%0

3 1

4 1

5 1

8 3

9 1

10 1

代码语言:javascript
运行
复制
startNumber = $1

{ if ($2 > 1) { print "Start Number", startNumber } else {
    if ($2 <= 1) endNumber=$1
    }
} {print "printing the endNumber", endNumber}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-09 23:40:37

你也可以试试

代码语言:javascript
运行
复制
awk -f range.awk input.txt

哪里

input.txt是您的输入文件,range.awk

代码语言:javascript
运行
复制
NR==1 { first=$1; prev=first; next }
{
    if ($1-prev != 1) {
        if (f) printf "%d-%d\n",first,prev
        first=$1; f=0
    } else f=1
    prev=$1; 
}
END {
    if (f) printf "%d-%d\n",first,prev
}
票数 1
EN

Stack Overflow用户

发布于 2013-11-09 21:06:27

像这样的东西应该管用。

代码语言:javascript
运行
复制
$ awk '1{if (NR==1) {a=$0; print $0, 0} else {print $0, $0-a; a=$0}}' test
2 0
3 1
4 1
5 1
8 3
9 1
10 1
票数 0
EN

Stack Overflow用户

发布于 2013-11-09 21:06:29

像这样的吗?

代码语言:javascript
运行
复制
awk '{print $1,$1-a;a=$1}' file
2 2
3 1
4 1
5 1
8 3
9 1
10 1

如果你喜欢在2之后0,你可以:

代码语言:javascript
运行
复制
awk 'NR==1 {a=$1} {print $1,$1-a;a=$1}' file
2 0
3 1
4 1
5 1
8 3
9 1
10 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19882944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档