awk - печать перекрывающихся диапазонов

Боюсь, я не сталкивался с прямым способом сделать это, хотя я пытался адаптировать некоторые предоставленные решения для подобных сценариев (но не совсем для того, что мне нужно). Учитывая эти данные:

1118 1120
1121 1124
1122 1127
1125 1126
1128 1133
1130 1135
1136 1139
1137 1138
1140 1145

Он уже отсортирован по столбцу 1. За исключением первой и последней строк, все остальные имеют интервалы, которые перекрываются попарно. Поэтому я хочу вывод только с перекрывающимися диапазонами:

1122 1124
1125 1126
1130 1133
1137 1138

По крайней мере, для меня это сложнее, чем я ожидал на первый взгляд.

1 ответ

Вот один из способов сделать это в awk. Там, вероятно, более эффективный способ.

awk '{b=e=0; for(i=$1; i<=$2; i++) { if (exists[i]) if(b==0) {b=e=i} else {e=i}; exists[i]=i; } if(b) print b,e; }' input_file
Другие вопросы по тегам