Commit 3d7b4389 authored by Carsten Kemena's avatar Carsten Kemena

improved documentation, improved tests

parent 17d18002
......@@ -47,6 +47,10 @@ doc/html
.project
.settings
# Visual studio code #
######################
.vscode
# Packages #
############
# it's better to unpack these files and commit the raw source
......
......@@ -109,7 +109,7 @@ htmlhelp_basename = 'RADSdoc'
latex_elements = {
'sphinxsetup':'VerbatimColor={rgb}{0.87,0.87,0.87},verbatimwithframe=false',
'classoptions': ',openany,onside'
'classoptions': ',openany,oneside'
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
......
.. _general:
************
General
************
RADS 2.0 and newer is a complete new implementation based on the ideas in the original publication (see below). However,
the scoring scheme, options etc. have been changed. The next chapters will show you how to install and use this version.
===============
Contact
===============
If you have any problems, questions or suggestions concerning this program please contact us: domainWorld@uni-muenster.de
===============
Citation
===============
If you find RADS useful in your research, please cite:
Terrapon, Nicolas, Weiner, January, Grath, Sonja, Moore, Andrew D, Bornberg-Bauer, Erich: Rapid similarity search of proteins using alignments of domain arrangements., Bioinformatics (2014) 30 (2): 274-281. doi: 10.1093/bioinformatics/btt379
http://bioinformatics.oxfordjournals.org/content/30/2/274.long
......@@ -9,7 +9,7 @@ Installation
Requirements
------------
We try to keep the dependencies as little as possible. Current dependencies are:
We try to keep the dependencies as few as possible. Current dependencies are:
* BioSeqDataLib (https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib) (can be added via git submodule)
* boost (http://www.boost.org)
......@@ -20,7 +20,13 @@ We try to keep the dependencies as little as possible. Current dependencies are:
Download
--------
The easiest way to download the most current version of RADS is to use git:
You can currently choose between two different donwnload options: ``git`` and a manual download. Using ``git`` is the recommended way but if that is
not possible you can use the manual way instead. Both ways are described in the next sections.
Git
^^^
The easiest way to download the most current version of RADS is to use ``git``:
.. code-block:: bash
......@@ -30,23 +36,35 @@ The easiest way to download the most current version of RADS is to use git:
git submodule update
If you don't want to use git, you can download the source code from here: https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz. Below you find the commands needed to put everything necessary in its correct place. You can replace the ``wget`` command with manual downloads and copying the file to the correct position.
If you want to update to a newer version you can simply run the following command:
.. code-block:: bash
git pull
git submodule update
Do not forget to recombile the program after this step.
Manual download
^^^^^^^^^^^^^^^
If you don't want to use git, you can download the source code from here: https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz.
Below you find the commands needed to put everything necessary in its correct place. You can replace the ``wget`` command with manual downloads and copying the
file to the correct position if you do not have an internet connection.
.. code-block:: bash
wget https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz
tar xfz RADS-master.tar.gz
# The BioSeqDataLib now needs to be added manually
cd RADS-master/libs
rmdir BioSeqDataLib
wget https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib/-/archive/master/BioSeqDataLib-master.tar.gz
tar xfz BioSeqDataLib-master.tar.gz
mv BioSeqDataLib-master BioSeqDataLib
-----------
Compilation
-----------
......@@ -59,5 +77,3 @@ Change into the RADS directory and run the following commands:
cd build
cmake ..
make
......@@ -25,22 +25,22 @@ The basic options
.. option:: -h, --help
Produces this help message
.. option:: -i <FILE>, --input <FILE>
Domain arrangement file(s) that should be turned into a database.
Domain arrangement file(s) that should be turned into a database.
.. option:: -I <FILE>, --InterPro <FILE>
Used to turn the InterPro annotation file (match\_complete.xml.gz) found on https://www.ebi.ac.uk/interpro/download.html into a RADS database. This option is used to compute the precomputed InterPro databases. Use the :option:`--database` option to extract the domain arrangements of a single database.
.. option:: -s <FILE>, --seqs <FILE>
Sequence files. Are used in combination with the domain arrangement files. If none is given all sequence lengths are set to 0.
.. option:: -o <FILE>, --out <FILE>
The output prefix used to produce two files in format prefix.db and prefix.da. Be aware that we currently do no support adding data to an existing data base.
.. option:: -o <FILE>, --out <FILE>
The output prefix used to produce two files in format prefix.db and prefix.da. Be aware that we currently do not support adding data to an existing data base.
......@@ -52,8 +52,8 @@ Some options to influence the data base construction.
.. program:: makeRadsDB
.. option:: -d, --database
.. option:: -d, --database
This options is used together with the option: :option:`--InterPro`. It determines which of the supported databases to include in the RADS database.
......@@ -67,5 +67,3 @@ Examples
# running makeRadsDB providing pfam annotations and sequences
makeRadsDB -i domains1.pfam domains2.pfam -s seqs1.fa ses2.fa -o myDB
......@@ -17,15 +17,15 @@ a protein sequence that will be automatically annotated, or already an existing
.. code-block:: bash
# running RADS providing a manual list of domains as query
rads -D PF02758 PF05729 --db InterPro60-pfam -m pfam30.dsm
rads -D PF02758 PF05729 --db InterPro60-pfam -m pfam30.dsm
# running RADS providing a sequence as query
rads -Q seq.fasta --db InterPro60-pfam -m pfam30.dsm
rads -Q seq.fasta --db InterPro60-pfam -m pfam30.dsm
# running RADS providing a domain annotation as query
rads -q seq.dom --db InterPro60-pfam -m pfam30.dsm
rads -q seq.dom --db InterPro60-pfam -m pfam30.dsm
===============
Program Options
===============
......@@ -46,15 +46,15 @@ The general option influence the general behaviour of RADS:
.. option:: -d <FILE>, --db <FILE>
Prefix of the database. Can be either one of the precomputed ones downloaded from the website (see :ref:`setup`) or self-computed (see :ref:`makeRadsDB`).
.. option:: -o <FILE>, --out <FILE>
The output file.
.. option:: -l, --list-alignments
Report the alignments computed for the different domain arrangements.
.. option:: -n <INT>, --threads <INT>
The number of threads to be used by the program. Currently with this option several queries can be processed in parallel. If only one query is given, this program will still use only a single core. *Default: 1*
......@@ -69,15 +69,15 @@ The query options define the different ways a query can be provided.
.. option:: -q <FILE>, --query-dom <FILE>
The domain annotation file to be used as query. This is a simple domain annotation file in one of the supported formats (e.g. the output of ``pfam_scan.pl``).
.. option:: -Q <FILE>, --query-seq <FILE>
File containing sequences to be used as queries. The file has to be in FASTA format.
.. option:: --domain-db <FILE>
The domain database to use for automated annotation.
The domain database to use for automated annotation.
.. option:: -D <IDs>, --domains <IDs>
Provide a domain arrangement manually in form of space separated domain accession numbers (e.g. PF00001 PF00002).
......@@ -92,7 +92,7 @@ These parameters influence the alignment scoring similar to the same values in a
.. option:: -m <FILE>, --matrix <FILE>
The domain similarity matrix. This one needs to fit the data in the database (e.g. If you work with a database that contain Pfam domains, use the corresponding Pfam similarity matrix.
The domain similarity matrix. This one needs to fit the data in the database meanint, that if you work with a database that contains Pfam domains, use the corresponding Pfam similarity matrix.
.. option:: --gop <INT>
Gap opening penalty. These costs are applied once for each consecutive set of gaps in a domain arrangement. They are not applied to gaps at the ends of the alignment. *Default: -50*
......@@ -101,7 +101,7 @@ These parameters influence the alignment scoring similar to the same values in a
Gap extension penalty. These costs are applied to each single gap character in the alignment. *Default: -10*
.. option:: -c, --collapse
Collapse consecutive identical domains. It is **recommended to use** this option. The reason why this is not automatically done is that it actually changes the domain arrangements. However, domains can often duplicate and several times the same domain in a row is not uncommon, usually without affecting the function of a protein. *Default: false*
Collapse consecutive identical domains. It is **recommended to use** this option. The reason why this is not automatically done is that it actually changes the domain arrangements. However, domains can often duplicate and several repeats of the same domain in a row is not uncommon, usually without affecting the function of a protein. *Default: false*
------------------------------
Result filtering options
......@@ -114,13 +114,13 @@ These options can be used to filter the hits that are reported.
.. option:: -a, --all
All of the domain IDs in the query have to appear in the target sequences as well. *Default: false*
.. option:: -M <INT>, --min-score <INT>
Only alignments with a score larger or equal to this value are reported. *Default: 0*
===============
Output format
===============
......@@ -130,15 +130,15 @@ The table is sorted according to the first column.
.. code-block:: text
# RADS version 2.2.0
# RADS Output v1
# run at Fri Apr 20 14:19:09 2018
#
# query file: -
# database: interPro-test
# gap open penalty -50
# gap extension penalty -10
# matrix: pfam-31.dsm
# RADS version 2.2.0
# RADS Output v1
# run at Fri Apr 20 14:19:09 2018
#
# query file: -
# database: interPro-test
# gap open penalty -50
# gap extension penalty -10
# matrix: pfam-31.dsm
# all: false
# collapse: true
# ******************************************************************
......@@ -155,10 +155,10 @@ The table is sorted according to the first column.
190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524
If you used the :option:`--list-alignments` option you will find additional output. An additional column denotes the alignment ID. The alignments can then be found at the end of the table.
If you used the :option:`--list-alignments` option you will find additional output. An additional column denotes the alignment ID. The alignments can then be found at the end of the table.
.. note::
Be aware that if you use additionally the :option:`--collapse` option the table will still show the original domain arrangement, the alignment though will use the collapsed version. See example below.
......@@ -176,7 +176,7 @@ If you used the :option:`--list-alignments` option you will find additional outp
# all: false
# collapse: true
# ******************************************************************
# -------------------------------------------------------------------
Results for: manual entered query
Domain arrangement: PF00001 PF00002 PF00003
......@@ -200,19 +200,7 @@ If you used the :option:`--list-alignments` option you will find additional outp
2)
Query DA: PF00001 PF00002 PF00003
Target DA: PF00001 PF00002 *******
3)
Query DA: PF00001 PF00002 PF00003
Target DA: ******* PF00002 PF00003
===============
Citation
===============
If you find RADS useful in your research, please cite it.
Terrapon, Nicolas, Weiner, January, Grath, Sonja, Moore, Andrew D, Bornberg-Bauer, Erich: Rapid similarity search of proteins using alignments of domain arrangements., Bioinformatics (2014) 30 (2): 274-281. doi: 10.1093/bioinformatics/btt379
http://bioinformatics.oxfordjournals.org/content/30/2/274.long
......@@ -11,11 +11,12 @@ Welcome to RADS's documentation!
:maxdepth: 2
:caption: Contents:
content/general.rst
content/installation.rst
content/setup.rst
content/rads_usage.rst
content/makedb_usage.rst
.. only:: html
......@@ -24,5 +25,3 @@ Welcome to RADS's documentation!
* :ref:`genindex`
* :ref:`search`
......@@ -77,15 +77,10 @@ main(int argc, char *argv[])
("out,o", po::value<string>(&prefix)->required()->value_name("FILE"), "The output prefix")
;
//std::vector<string> databases;
string database;
// unsigned int threshold;
// bool filter;
po::options_description filterOpts("Filter options");
filterOpts.add_options()
("databases,d", po::value<string>(&database), "The database to use")
// ("filter,f", po::value<bool>(&filter)->default_value(false)->zero_tokens(), "Remove overlapping domains")
// ("threshold,t", po::value<unsigned int>(&threshold)->default_value(10), "Maximal number of allowed overlap")
;
allOpts.add(general).add(filterOpts);
......@@ -120,8 +115,6 @@ main(int argc, char *argv[])
try
{
DBCreator db;
// db.filter(filter);
// db.threshold(threshold);
size_t nDaFiles = daFiles.size();
for (size_t i=0; i<nDaFiles; ++i)
{
......@@ -132,12 +125,7 @@ main(int argc, char *argv[])
}
if (!interProFile.empty())
{
/*set<string> dbSupported;
for (auto &db : databases)
dbSupported.emplace(std::move(db));*/
db.readInterPro(interProFile, database);
}
// output
std::map<std::string, std::string> info;
......
# pfam_scan.pl, run at Fri Dec 2 10:10:58 2016
#
# Copyright (c) 2009 Genome Research Ltd
# Freely distributed under the GNU
# General Public License
#
# Authors: Jaina Mistry (jm14@sanger.ac.uk), John Tate (jt6@sanger.ac.uk),
# Rob Finn (rdf@sanger.ac.uk)
#
# This is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
# query sequence file: db_seqs.fa
# searching against: /global/databases/pfam/v30.0//Pfam-A.hmm, with cut off --cut_ga
# resolve clan overlaps: on
# predict active sites: off
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#
# <seq id> <alignment start> <alignment end> <envelope start> <envelope end> <hmm acc> <hmm name> <type> <hmm start> <hmm end> <hmm length> <bit score> <E-value> <significance> <clan>
A0A001 20 276 11 277 PF00664.21 ABC_membrane Family 12 273 274 29.9 3.7e-07 1 CL0241
A0A001 361 504 360 506 PF00005.25 ABC_tran Domain 2 135 137 80.1 1.9e-22 1 CL0023
A0A007 3 105 1 105 PF02310.17 B12-binding Domain 19 121 121 49.3 3.9e-13 1 CL0063
A0A007 164 324 163 325 PF04055.19 Radical_SAM Domain 2 166 167 89.0 3.8e-25 1 CL0036
A0A002 19 279 8 279 PF00664.21 ABC_membrane Family 12 274 274 102.4 2.9e-29 1 CL0241
A0A002 340 489 340 489 PF00005.25 ABC_tran Domain 1 137 137 93.3 1.6e-26 1 CL0023
A0A003 15 249 15 249 PF01370.19 Epimerase Family 1 241 241 177.3 3.1e-52 1 CL0063
A0A000 41 381 37 381 PF00155.19 Aminotran_1_2 Domain 6 363 363 206.8 4.9e-61 1 CL0061
A0A004 49 162 48 163 PF13537.4 GATase_7 Domain 2 123 124 41.0 1.4e-10 1 CL0052
A0A004 240 626 239 627 PF00733.19 Asn_synthase Domain 2 354 355 277.1 2.9e-82 1 CL0039
A0A009 362 524 361 526 PF16861.3 Carbam_trans_C Domain 2 168 170 151.4 1.5e-44 1 No_clan
A0A009 10 63 2 69 PF02543.13 Carbam_trans_N Domain 11 66 338 33.8 2.6e-08 1 CL0108
A0A009 104 312 86 313 PF02543.13 Carbam_trans_N Domain 123 337 338 62.5 4.9e-17 1 CL0108
A0A009DWE1 1 126 1 126 PF00873.17 ACR_tran Family 209 329 1021 109.5 9.6e-32 1 CL0322
A0A010 10 63 2 69 PF02543.13 Carbam_trans_N Domain 11 66 338 33.8 2.6e-08 1 CL0108
A0A010 362 524 361 526 PF16861.3 Carbam_trans_C Domain 2 168 170 151.4 1.5e-44 1 No_clan
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE interpromatch SYSTEM "match_complete.dtd">
<interpromatch>
<release>
<dbinfo dbname="PANTHER" version="10.0" entry_count="95118" file_date="15-MAY-15" />
<dbinfo dbname="PFAM" version="28.0" entry_count="16230" file_date="20-MAY-15" />
<dbinfo dbname="PIRSF" version="3.01" entry_count="3285" file_date="07-APR-14" />
<dbinfo dbname="PRINTS" version="42.0" entry_count="2106" file_date="14-JUN-12" />
<dbinfo dbname="PRODOM" version="2006.1" entry_count="1894" file_date="23-APR-09" />
<dbinfo dbname="PROSITE" version="20.119" entry_count="1309" file_date="14-OCT-15" />
<dbinfo dbname="PROFILE" version="20.119" entry_count="1136" file_date="14-OCT-15" />
<dbinfo dbname="SMART" version="6.2" entry_count="1008" file_date="24-OCT-11" />
<dbinfo dbname="TIGRFAMs" version="15.0" entry_count="4488" file_date="16-SEP-14" />
<dbinfo dbname="GENE3D" version="3.5.0" entry_count="2626" file_date="18-MAR-12" />
<dbinfo dbname="SSF" version="1.75" entry_count="2019" file_date="08-NOV-10" />
<dbinfo dbname="SWISSPROT" version="2016_02" entry_count="550552" file_date="17-FEB-16" />
<dbinfo dbname="TREMBL" version="2016_02" entry_count="60971489" file_date="17-FEB-16" />
<dbinfo dbname="INTERPRO" version="56.0" entry_count="28926" file_date="18-FEB-16" />
<dbinfo dbname="GO" version="N/A" entry_count="23937" file_date="27-MAR-07" />
<dbinfo dbname="MEROPS" version="9.3" entry_count="3830" file_date="14-DEC-10" />
<dbinfo dbname="UniProt" version="2016_02" entry_count="61522041" file_date="17-FEB-16" />
<dbinfo dbname="HAMAP" version="201511.02" entry_count="2045" file_date="09-NOV-15" />
<dbinfo dbname="PFAMB" version="27.0" entry_count="20000" file_date="22-MAR-13" />
</release><protein id="A0A000" name="A0A000_9ACTN" length="394" crc64="F1DD0C1042811B48">
<match id="PF00003" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="125" end="250" score="5.1E-61" />
</match>
<match id="PF00001" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="41" end="60" score="5.1E-61" />
</match>
<match id="PF00002" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="80" end="100" score="5.1E-61" />
</match>
</protein>
<protein id="A0A001" name="A0A000_9ACTN" length="394" crc64="F1DD0C1042811B48">
<match id="PF00001" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="41" end="60" score="5.1E-61" />
</match>
<match id="PF00002" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="80" end="100" score="5.1E-61" />
</match>
<match id="PF00003" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="120" end="250" score="5.1E-61" />
</match>
</protein>
<protein id="A0A002" name="A0A000_9ACTN" length="394" crc64="F1DD0C1042811B48">
<match id="PF00403" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="120" end="250" score="5.1E-61" />
</match>
<match id="PF00401" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="41" end="60" score="5.1E-61" />
</match>
<match id="PF00402" name="Aminotran_1_2" dbname="PFAM" status="T" evd="HMMPfam">
<ipr id="IPR004839" name="Aminotransferase, class I/classII" type="Domain" parent_id="IPR015424" />
<lcn start="80" end="100" score="5.1E-61" />
</match>
</protein>
# RADS version 2.3.0
# RADS Output v1
# run at Thu Jun 28 11:22:17 2018
#
# query file: -
# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/annotation
# gap open penalty -50
# gap extension penalty -10
# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm
# all: false
# collapse: true
# ******************************************************************
# -------------------------------------------------------------------
Results for: manual entered query
Domain arrangement: PF02543 PF16861
# score | normalized | SeqID | sequence length | domain arrangement | aln
# -------------------------------------------------------------------
200 0.71 A0A009 530 PF02543 9 62 PF02543 103 311 PF16861 361 523 1
200 1.00 A0A010 0 PF02543 9 62 PF16861 361 523 2
# -------------------------------------------------------------------
List of alignments:
# -------------------------------------------------------------------
1)
Query DA: PF02543 PF16861
Target DA: PF02543 PF16861
2)
Query DA: PF02543 PF16861
Target DA: PF02543 PF16861
# RADS version 2.3.0
# RADS Output v1
# run at Thu Jun 28 13:18:17 2018
#
# query file: -
# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/ip_order
# gap open penalty -50
# gap extension penalty -10
# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm
# all: false
# collapse: true
# ******************************************************************
# -------------------------------------------------------------------
Results for: manual entered query
Domain arrangement: PF00001
# score | normalized | SeqID | sequence length | domain arrangement | aln
# -------------------------------------------------------------------
80 0.35 A0A000 394 PF00001 41 60 PF00002 80 100 PF00003 125 250 1
80 0.35 A0A001 394 PF00001 41 60 PF00002 80 100 PF00003 120 250 1
# -------------------------------------------------------------------
List of alignments:
# -------------------------------------------------------------------
1)
Query DA: PF00001 ******* *******
Target DA: PF00001 PF00002 PF00003
......@@ -71,3 +71,36 @@
rm interPro-test.db interPro-test.da
rm test3Res.txt test3bRes.txt test2Res.txt test4Res.txt
}
@test "rads - collapse and align" {
# database based on pfam annotation files
run ../../build/makeRadsDB -i ../data/db_pfam2.dom -s ../data/db_seqs.fa -o annotation
[ $status == 0 ]
echo $output
[ "$output" == $'Number of sequences included: 9\nNumber of distinct arrangements 8' ]
run ../../build/rads -D PF02543 PF16861 -m pfam-31.dsm -d annotation -o test-col-aln.txt -c -l
run diff <(grep -v '#' test-col-aln.txt) <(grep -v '#' results/test-col-aln.txt)
[ $status == 0 ]
rm annotation.db annotation.da test-col-aln.txt
}
@test "rads - InterPro order" {
# database based on pfam annotation files
run ../../build/makeRadsDB -I ../data/sort-test.xml -s ../data/db_seqs.fa -o ip_order -d PFAM
[ $status == 0 ]
echo $output
[ "$output" == $'Number of sequences included: 3\nNumber of distinct arrangements 2' ]
run ../../build/rads -D PF00001 -m pfam-31.dsm -d ip_order -o test-order.txt -c -l
run diff <(grep -v '#' test-order.txt) <(grep -v '#' results/test-order.txt)
[ $status == 0 ]
rm ip_order.db ip_order.da test-order.txt
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment