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