[英]identify min and max values of overlapping ranges from mutiple matches
給定以下三列制表符分隔的列表文件,其中每行中的值 1 和值 2 表示給定匹配中的范圍,最簡單的 shell 腳本/命令將識別每個匹配的所有重疊范圍並確定最小值和最大值整個重疊的價值? 對於給定的匹配,最小值始終位於范圍的第一列。 但是,在匹配中,列中的值不一定是排序的。
infile.txt:
match1 857 1107
match1 879 1128
match1 969 1126
match1 865 1115
match1 1296 1546
match1 1304 1554
match1 1318 1600
match1 1408 1562
match2 300 1100
match2 639 1225
match2 4299 6546
match2 5304 7754
輸出文件.txt:
match1 857 1128
match1 1296 1600
match2 300 1225
match2 4299 7754
什么是最簡單的 shell 腳本/命令,它將識別每個匹配的所有重疊范圍並確定整個重疊的最小值和最大值?
有爭議的是,這是否是最簡單的 shell 腳本可以做到這一點,但每個解決方案可能都必須對范圍進行排序並識別間隙,如下所示:
while read match min max
do printf %s\\n $match\ {$min..$max}
done <infile.txt | sort -u -k1,1 -k2n |
while read match value
do if [ $match != "$oldmatch" -o $value != $((oldvalue+1)) ]
then [ "$oldmatch" ] && echo $oldvalue
printf %s\\t $match $value
fi
oldmatch=$match
oldvalue=$value
done
echo $oldvalue
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.