awk打印连续数字范围:开始和结束范围

awk打印连续数字范围:开始和结束范围,awk,Awk,请帮助打印连续的数字范围,如[开始-结束] 样本输入 10 11 12 13 14 17 30 31 期望输出 10-14 17-17 30-31 提前谢谢 $ 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和ba是范围内的第一个数字b是到目前为止看到的范围内的最后一个数字 在awk

请帮助打印连续的数字范围,如[开始-结束]

样本输入

10
11
12
13
14
17
30
31
期望输出

10-14
17-17
30-31
提前谢谢

$ 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
块。它只打印出最后一个范围。

两个地方不需要
b=$1
。而且,第一个块可以是
NR==1
(不需要变量
f
)。否则,看起来不错:)