linux - 比较后续行的不同列以合并范围

标签 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

关于linux - 比较后续行的不同列以合并范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524900/

相关文章:

linux - 如何将stderr和stdout重定向到脚本同一行中的不同文件?

php - Phalcon在Centos上安装报错: make: *** [phalcon. lo] Error 1

c - 如何从 C 程序捕获 bash 脚本的输出?

unix - 在 unix 中使用 awk 删除重复项

linux - 如何使用 sed\awk 从文件中删除行?

linux - OpenSuse 13.2 中的 Cron 重启

bash - 如何仅从 "du"获取文件夹大小?

php - 如何在可访问 php 解释器的情况下在 Linux 服务器计算机上安排任务?

awk - 如果 AWK 中有特定字符,如何加入下一行?

linux - 购买专用的 Linux 服务器安全吗?