我有一个范围列表,我正在尝试合并彼此给定距离内的后续条目。
在我的数据中,第一列包含范围的下限,第二列包含上限 逻辑如下:如果第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
这会返回语法错误。
任何帮助表示赞赏!
答案 0 :(得分:1)
假设,如果条件满足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