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
我有一个文件,其中两列由单个制表符或单个 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