得到数字序列的外部范围

时间:2013-11-09 20:51:53

标签: unix awk

我有一列数字,例如:

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

startNumber = $1

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

3 个答案:

答案 0 :(得分:1)

您也可以尝试

awk -f range.awk input.txt

,其中

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

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 :(得分:0)

这样的事情应该有效。

$ 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

答案 2 :(得分:0)

有人这样吗?

awk '{print $1,$1-a;a=$1}' file
2 2
3 1
4 1
5 1
8 3
9 1
10 1

如果你喜欢2之后的0,你可以这样做:

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