簡體   English   中英

從多個匹配項中識別重疊范圍的最小值和最大值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM