如何打印序列号的范围

时间:2015-04-24 14:25:50

标签: unix awk sed perl-module

朋友们,我有一个文件中的非连续数字列表,需要列出连续的数字范围。

示例:

641
642
643
712
713
714
813
814
815

需要打印:

641-643,712-714,813-815

在awk,unix或perl中

1 个答案:

答案 0 :(得分:1)

此行适用于您的示例:

awk 'NR==1{printf "%s",$0;p=$0;next}
     $0!=p+1{printf "-%d %d",p,$0}{p=$0}END{print "-"$0}' f

包含您的数据:

kent$  cat f
641
642
643
712
713
714
813
814
815
kent$   awk 'NR==1{printf "%s",$0;p=$0;next}$0!=p+1{printf "-%d %d",p,$0}{p=$0}END{print "-"$0}' f
641-643 712-714 813-815

请注意,最后一个组号可能有问题(意外-)这取决于您的输入。无论如何,你明白了,你可以在上面的行上做一些调整。