比较随后的行的不同列与合并范围

  • 本文关键字:合并 范围 比较 linux bash awk
  • 更新时间 :
  • 英文 :


我有一个范围列表,我正在尝试合并后续条目,这些条目彼此之间的距离内。

在我的数据中,第一列包含范围的下限,第二列包含上限。
逻辑如下:如果第1列中的值小于或等于上一行的第2列中的值以及给定值,请在上一行的第1列中打印条目,以及在给定行的第2列中的条目。

如果两个范围位于变量" dist"指定的距离内,则应合并它们,否则应按原样打印行。

Input:    
1   10  
9   19  
51  60
if dist=10, Desired output:    
1   19  
51  60  

使用bash,我尝试了这些行:

dist=10  
awk '$1 -le (p + ${dist}) { print q, $2 } {p=$2;} {q=$1} ' input.txt > output.txt

这返回语法错误。

任何帮助!

假设,如果满足了2对连续记录的条件(即总共3个记录,连续3个记录),则第三个将考虑rec-1和rec-2的输出,因为它是以前的记录。

awk -v dist=10 'FNR==1{prev_1=$1; prev_2=$2; next} ($1<=prev_2+dist){print prev_1,$2; prev_2=$2;next} {prev_1=$1; prev_2=$2}1' file

输入:

$cat file
1 10
9 19
10 30
51 60

输出:

1 19
1 30
51 60

最新更新