我有一列数字,例如:
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}
答案 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