awk print连续编号范围:开始和结束范围

时间:2014-05-13 05:24:56

标签: awk

请帮助打印[Start -End] ..,

等连续数字范围

示例输入

10
11
12
13
14
17
30
31

期望的输出

10-14
17-17
30-31

提前致谢

1 个答案:

答案 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

上面有两个变量aba是该范围内的第一个数字。 b是目前为止所见范围内的最后一个数字。

awk中,NR是行(记录)编号。 awk程序的第一部分仅使用第一行初始化ab变量:NR==1 {a=$1;b=$1;next}

程序的下一部分($1 != b+1){print a,"-",b; a=$1}检查新范围是否已开始。如果是,则打印旧范围并更新a

无论新范围是否已开始,b都会更新为当前行中的值:{b=$1}

在看到最后一行之后,执行END块。它只打印出最后一个范围。