我有一列数字,例如:
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}
发布于 2013-11-09 23:40:37
你也可以试试
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-09 21:06:27
像这样的东西应该管用。
$ 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-09 21:06:29
像这样的吗?
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
https://stackoverflow.com/questions/19882944
复制相似问题