Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 比较后续行的不同列以合并范围_Linux_Bash_Awk - Fatal编程技术网

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

Linux 比较后续行的不同列以合并范围,linux,bash,awk,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,

我有一个范围列表,我正在尝试合并彼此在给定距离内的后续条目

在我的数据中,第一列包含范围的下限,第二列包含上限。
逻辑如下:如果第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个记录,连续地),则第三个将考虑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
输出:

1 19
1 30
51 60

快速评论:您不能在
awk
中使用
bash
语法,它们是完全不同的东西。。。使用
see将shell变量传递给awkawk不是shell。它是一个完全不同的工具,有自己的语法、语义和范围。获取Arnold Robbins编写的有效的Awk编程,第四版,开始学习如何编写Awk程序。如果您有两个连续的匹配怎么办?i、 例如,第二行应与第一行合并,但第三行应与第二行合并,甚至与第一行合并。这不会压缩中间的线。可以吗?什么才是最完美的?您的问题包括在示例输入/输出中范围跨越多行的情况。非常感谢,蝙蝠侠!
1 19
1 30
51 60