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
)。否则,看起来不错:)