Return 一列的范围基于第二列的组编号

Return ranges of one column based on group number of a second column

我有一个文件,其中两列由单个制表符或单个 space 分隔(两种方式都可以)。第一列按升序排序。第二列可以取三个不同的数字(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 !=  {if (NR>1) print start, p1, p2; start = } {p1 = ; p2 = } END{print start, p1, p2}' file

15295557    15295834    2
15295937    15302817    1
15303844    15304062    0
15313455    15320945    2

扩展形式:

awk '
BEGIN {FS=OFS="\t"}
p2 !=  {
   if (NR > 1)
      print start, p1, p2
   start = 
}
{
   p1 = 
   p2 = 
}
END {
   print start, p1, p2
}' file