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 '{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 に答える
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 に答える