Awk 基于第二列的组号返回一列的范围

Awk 基于第二列的组号返回一列的范围,awk,sed,range,multiple-columns,Awk,Sed,Range,Multiple Columns,我有一个文件,其中两列由一个选项卡或一个空格分隔(任何一种方式都可以)。第一列按升序排序。第二列可以包含三个不同的数字(0、1或2)。以下面的例子为例: col1 col2 15295557 2 15295594 2 15295834 2 15295937 1 15295959 1 15302817 1 15303844 0 15303848 0 15303851 0 15303860 0 15304062 0 15313455 2 15314748 2 15320909 2 15320945

我有一个文件,其中两列由一个选项卡或一个空格分隔(任何一种方式都可以)。第一列按升序排序。第二列可以包含三个不同的数字(0、1或2)。以下面的例子为例:

col1 col2
15295557 2
15295594 2
15295834 2
15295937 1
15295959 1
15302817 1
15303844 0
15303848 0
15303851 0
15303860 0
15304062 0
15313455 2
15314748 2
15320909 2
15320945 2

我希望根据第二列中的数字将第一列按范围分组。所需的输出如下:

col1 col2 col3
15295557 15295834 2
15295937 15302817 1
15303844 15304062 0
15313455 15320945 2
我相信awk或sed可以很容易地做到这一点,但我的技能真的很有限。。。 任何帮助都将不胜感激! 谢谢

您可以试试这个awk:

awk'BEGIN{FS=OFS=“\t”}p2!=$2{if(NR>1)print start,p1,p2;start=$1}{p1=$1;p2=$2}END{print start,p1,p2}'文件
15295557    15295834    2
15295937    15302817    1
15303844    15304062    0
15313455    15320945    2
扩展形式:

awk'
开始{FS=OFS=“\t”}
p2!=$2 {
如果(NR>1)
打印开始,p1,p2
起价=$1
}
{
p1=1美元
p2=2美元
}
结束{
打印开始,p1,p2
}"档案"

输入数据的格式是什么?是逗号分隔还是制表符分隔,还是其他什么?