如何从包含多个序列的列中grep数值序列的范围

时间:2016-09-27 11:10:00

标签: arrays sorting awk sed grep

我正在编写新的bash脚本,并提出以下问题;如何从一列中提取范围(第一个和最后一个值),该列包含几个可以增加或减少3的增量和减量数字序列,并在检测到增量> 3时跳转到下一个序列,例如:

1
4
7
20
23
26
100
97
94

需要作为输出接收:

1,7
20,26
100,94

2 个答案:

答案 0 :(得分:3)

这个awk脚本为您提供了预期的输出:

db._explain()

答案 1 :(得分:3)

使用awk:

$ awk 'NR==1||sqrt(($0-p)*($0-p))>3{print p; printf "%s", $0 ", "} {p=$0} END{print $0}' file

1, 7
20, 26
100, 94

说明:

NR==1 || sqrt(($0-p)*($0-p))>3 {  # if the abs($0-previous) > 3
    print p                       # print previous to end a sequence and
    printf "%s", $0 ", "          # start a new sequence
} 
{ p=$0 } 
END { print $0 }