# subtract

`bedtools subtract` bedtools` subtract searches for features in B that overlap A by at least the number of base pairs given by the -f option. If an overlapping feature is found in B, the overlapping portion is removed from A and the remaining portion of A is reported. If a feature in B overlaps all of a feature in A, the A feature will not be reported. If a feature in B does not overlap a feature in A by at least the -f amount, the A feature will be reported in its entirety.

## Usage and option summary

Usage:

    bedtools subtract [OPTIONS] -a <BED/GFF/VCF> -b <BED/GFF/VCF>

(or):

    subtractBed [OPTIONS] -a <BED/GFF/VCF> -b <BED/GFF/VCF>

Option | Description
--- | ---
-f | Minimum overlap required as a fraction of A. Default is 1E-9 (i.e. 1bp).
-F | Minimum overlap required as a fraction of B. Default is 1E-9 (i.e., 1bp).
-r | Require that the fraction of overlap be reciprocal for A and B. In other words, if -f is 0.90 and -r is used, this requires that B overlap at least 90% of A and that A also overlaps at least 90% of B.
-e | Require that the minimum fraction be satisfied for A _OR_ B. In other words, if -e is used with -f 0.90 and -F 0.10 this requires that either 90% of A is covered OR 10% of B is covered. Without -e, both fractions would have to be satisfied.
-s | Force “strandedness”. That is, only report hits in B that overlap A on the same strand. By default, overlaps are reported without respect to strand.
-S | Require different strandedness. That is, only report hits in B that overlap A on the _opposite_ strand. By default, overlaps are reported without respect to strand.
-A | Remove entire feature if any overlap. That is, by default, only subtract the portion of A that overlaps B. Here, if any overlap is found (or `-f` amount), the entire feature is removed.
-N | Same as -A except when used with -f, the amount is the sum of all features (not any single feature).

## Default behavior

By default, `bedtools subtracts` removes each overlapping interval in B from A. If a feature in B completely overlaps a feature in A, the A feature is removed.

    $ cat A.bed
    chr1  10   20
    chr1  100  200

    $ cat B.bed
    chr1  0    30
    chr1  180  300

    $ bedtools subtract -a A.bed -b B.bed
    chr1  100  180

## `-f` Requiring a minimal overlap fraction before subtracting

This option behaves the same as the `-f` option for `bedtools intersect`. In this case, `subtract` will only subtract an overlap with B if it covers at least the fraction of A defined by `-f`. If an overlap is found, but it does not meet the overlap fraction, the original A feature is reported without subtraction.

    $ cat A.bed
    chr1  100  200

    $ cat B.bed
    chr1  180  300

    $ bedtools subtract -a A.bed -b B.bed -f 0.10
    chr1  100  180

    $ bedtools subtract -a A.bed -b B.bed -f 0.80
    chr1  100  200

## `-s` Enforcing same “strandedness”

This option behaves the same as the `-s` option for `bedtools intersect` while scanning for features in B that should be subtracted from A.

    $ cat A.bed
    chr1  100  200    a1  1   +

    $ cat B.bed
    chr1  80   120    b1  1   +
    chr1  180  300    b2  1   -

    $ bedtools subtract -a A.bed -b B.bed -s
    chr1  120  200    a1  1   +

## `-S` Enforcing opposite “strandedness”

This option behaves the same as the `-s` option for `bedtools intersect` while scanning for features in B that should be subtracted from A.

    $ cat A.bed
    chr1  100  200    a1  1   +

    $ cat B.bed
    chr1  80   120    b1  1   +
    chr1  180  300    b2  1   -

    $ bedtools subtract -a A.bed -b B.bed -S
    chr1  100  180    a1  1   +

## `-A` Remove features with any overlap

Unlike the default behavior, the `-A` option will completely remove a feature from A if it has even 1bp of overlap with a feature in B.

    $ cat A.bed
    chr1  100  200

    $ cat B.bed
    chr1  180  300

    $ bedtools subtract -a A.bed -b B.bed
    chr1  100  180

    $ bedtools subtract -a A.bed -b B.bed -A

comments powered by Disqus