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

startNumber = $1

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

3 回答 3

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
}
于 2013-11-09T23:40:37.450 回答
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
于 2013-11-09T21:06:27.720 回答
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
于 2013-11-09T21:06:29.320 回答