2017-07-18 79 views
0

恐怕我還沒有遇到過這樣做的直接方式,儘管我嘗試了一些爲類似場景提供的解決方案(但並不完全符合我的需要)。鑑於這樣的數據: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 

對我來說,這至少是我乍一看的難點。

+2

'試圖適應一些solutions'提供請添加質疑......它會顯示你的努力......否則可能的問題將被視爲要求免費服務編碼.. – Sundeep

+0

何必'1122 1127 '不在輸出中? – RomanPerekhrest

+0

@Sundeep:https://stackoverflow.com/questions/12742484/identify-overlapping-ranges-in-awk; https://stackoverflow.com/questions/16638951/how-to-remove-overlap-in-numeric-ranges-awk; https://stackoverflow.com/questions/21488613/awk-to-find-overlaps; https://stackoverflow.com/questions/38482040/using-awk-to-print-pairs-of-records-having-overlapping-range-of-values-between-t;還有一個在stackoverflow上找不到,但我找不到它。 –

回答

0

這裏有一種方法可以在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