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

时间:2019-05-28 21:04:58

标签: 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
seq2 100 200
seq3 210 300
seq1 310 400

是否可以通过awk或其他方式在bash中执行此操作?

2 个答案:

答案 0 :(得分:3)

您可以使用此awk

awk 'p != $1 {if (NR>1) print p, first, last; first=$2} {p=$1; last=$2} 
END{print p, first, last}' file

seq1 2 10
seq3 15 60
seq2 100 200
seq3 210 300
seq1 310 400

答案 1 :(得分:1)

另一个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

$