请帮助打印[Start -End] ..,
等连续数字范围示例输入
10
11
12
13
14
17
30
31
期望的输出
10-14
17-17
30-31
提前致谢
答案 0 :(得分:1)
$ awk 'NR==1 {a=$1;b=$1;next} ($1 != b+1){print a,"-",b; a=$1} {b=$1} END{print a,"-",b}' numbers
10 - 14
17 - 17
30 - 31
上面有两个变量a
和b
。 a
是该范围内的第一个数字。 b
是目前为止所见范围内的最后一个数字。
在awk
中,NR
是行(记录)编号。 awk
程序的第一部分仅使用第一行初始化a
和b
变量:NR==1 {a=$1;b=$1;next}
程序的下一部分($1 != b+1){print a,"-",b; a=$1}
检查新范围是否已开始。如果是,则打印旧范围并更新a
。
无论新范围是否已开始,b
都会更新为当前行中的值:{b=$1}
。
在看到最后一行之后,执行END
块。它只打印出最后一个范围。