Bash 抓取每个序列的第一个和最后一个元素

Bash 抓取每个序列的第一个和最后一个元素,bash,awk,Bash,Awk,我有一个文件,其中包含3种类型的序列及其重复出现的位置: seq1 2 seq1 5 seq1 10 seq3 15 seq3 34 seq3 60 seq2 100 seq2 110 seq2 200 seq3 210 seq3 250 seq3 300 seq1 310 seq1 330 seq1 400 第二个值总是唯一的,表示一个位置并进行排序,因此序列是分散的 每次序列开始时,我都要获取序列的最小值和最大值。输出应为seq min max seq1 2 10 seq3 15 60 s

我有一个文件,其中包含3种类型的序列及其重复出现的位置:

seq1 2
seq1 5
seq1 10
seq3 15
seq3 34
seq3 60
seq2 100
seq2 110
seq2 200
seq3 210
seq3 250
seq3 300
seq1 310
seq1 330
seq1 400
第二个值总是唯一的,表示一个位置并进行排序,因此序列是分散的

每次序列开始时,我都要获取序列的最小值和最大值。输出应为seq min max

seq1 2 10
seq3 15 60
seq2 100 200
seq3 210 300
seq1 310 400
是否可以在bash中使用awk或其他任何工具执行此操作?

您可以使用此awk:

您可以使用此awk:

另一个awk

$ awk ' { if(NR>1 && p!=$1) { print p,min,max; max=min=""} min=min?min:$2; max=$2; p=$1 } 
END { print p,min,max } ' adrian.txt
seq1 2 10
seq3 15 60
seq2 100 200
seq3 210 300
seq1 310 400

$
另一个awk

$ awk ' { if(NR>1 && p!=$1) { print p,min,max; max=min=""} min=min?min:$2; max=$2; p=$1 } 
END { print p,min,max } ' adrian.txt
seq1 2 10
seq3 15 60
seq2 100 200
seq3 210 300
seq1 310 400

$
$ awk ' { if(NR>1 && p!=$1) { print p,min,max; max=min=""} min=min?min:$2; max=$2; p=$1 } 
END { print p,min,max } ' adrian.txt
seq1 2 10
seq3 15 60
seq2 100 200
seq3 210 300
seq1 310 400

$