2447f79454d20c9ffaf4a90f446a541af2b5ca7d hiram Tue Aug 2 12:32:07 2022 -0700 should not be outputting zero length items refs #29796 diff --git src/utils/bedSingleCover.pl src/utils/bedSingleCover.pl index 3e64b4d..76407e3 100755 --- src/utils/bedSingleCover.pl +++ src/utils/bedSingleCover.pl @@ -1,61 +1,59 @@ #!/usr/bin/env perl # # bedSingleCover - combine overlapping bed elements into one element # DO NOT EDIT the /cluster/bin/scripts copy of this file -- # edit ~/kent/src/utils/bedSingleCover.pl instead. use strict; use warnings; my $argc = scalar(@ARGV); if ($argc < 1) { printf STDERR "usage: bedSingleCover.pl [file.bed] > singleCover.bed\n"; printf STDERR "will combine overlapping bed elements into one element\n"; printf STDERR "No need to pre-sort the bed file, it will be sorted here\n"; printf STDERR "result is four columns: chr start end size\n"; printf STDERR "where size is the size of the element: size=end-start\n"; printf STDERR "\nTo obtain a quick featureBits like measurement of\n"; printf STDERR "this singleCover result, using awk:\n"; printf STDERR " bedSingleCover.pl file.bed |"; printf STDERR " awk '{sum+=\$3-\$2}END{printf \"%%d bases\\n\", sum}'\n"; exit 255 } my $bedFile = shift; my $chr = ""; my $prevEnd = 0; my $start = 0; my $end = 0; my $size = 0; if ($bedFile =~ m/^stdin$/) { open (FH, "grep -v '^ *#' /dev/stdin | sort -k1,1 -k2,2n |") or die "can not read /dev/stdin"; } else { open (FH, "grep -v '^ *#' $bedFile | sort -k1,1 -k2,2n|") or die "can not read $bedFile"; } while (my $line = ) { chomp $line; my ($c, $s, $e, $rest) = split('\s+', $line, 4); $size = $end - $start; if (length($chr) > 1) { if ($chr ne $c) { - printf "%s\t%d\t%d\t%d\n", $chr, $start, $end, $size; + printf "%s\t%d\t%d\t%d\n", $chr, $start, $end, $size if ($size > 0); $chr = $c; $start = $s; $end = $e; } else { if ($s <= $end) { $end = $e if ($e > $end); } else { - printf "%s\t%d\t%d\t%d\n", $chr, $start, $end, $size; + printf "%s\t%d\t%d\t%d\n", $chr, $start, $end, $size if ($size > 0); $chr = $c; $start = $s; $end = $e; } } } else { $chr = $c; $start = $s; $end = $e; } } $size = $end - $start; -if ($size > 0) { - printf "%s\t%d\t%d\t%d\n", $chr, $start, $end, $size; -} +printf "%s\t%d\t%d\t%d\n", $chr, $start, $end, $size if ($size > 0); close (FH);