kkonganti@0: #!/usr/bin/env bash kkonganti@0: kkonganti@0: ########################################################## kkonganti@0: # Constants kkonganti@0: ########################################################## kkonganti@0: GREEN=$(tput setaf 2) kkonganti@0: RED=$(tput setaf 1) kkonganti@0: CYAN=$(tput setaf 6) kkonganti@0: CLRESET=$(tput sgr0) kkonganti@0: prog_name="nowayout" kkonganti@0: dbBuild="03182024" kkonganti@0: dbPath="/hpc/db/${prog_name}/$dbBuild" kkonganti@0: taxonomyPath="$dbPath/taxonomy" kkonganti@0: kkonganti@0: usage() kkonganti@0: { kkonganti@0: echo kkonganti@0: echo usage: "$0" [-h] kkonganti@0: echo kkonganti@0: echo "Check for species presence in ${prog_name} database(s)." kkonganti@0: echo kkonganti@0: echo 'Example usage:' kkonganti@0: echo kkonganti@0: echo 'dbcheck -l' kkonganti@0: echo 'dbcheck -g Cathartus' kkonganti@0: echo 'dbcheck -d mitomine -g Cathartus' kkonganti@0: echo 'dbcheck -d mitomine -s "Cathartus quadriculus"' kkonganti@0: echo kkonganti@0: echo 'Options:' kkonganti@0: echo " -l : List ${prog_name} databases" kkonganti@0: echo ' -d : Search this database. Default: mitomine.' kkonganti@0: echo ' -g : Genus to search for.' kkonganti@0: echo ' -s : "Genus Species" to search for.' kkonganti@0: echo ' -h : Show this help message and exit' kkonganti@0: echo kkonganti@0: echo "$1" kkonganti@0: } kkonganti@0: kkonganti@0: while getopts ":d:g:s:l" OPT; do kkonganti@0: case "${OPT}" in kkonganti@0: l) kkonganti@0: listdb="list" kkonganti@0: ;; kkonganti@0: d) kkonganti@0: dbname=${OPTARG} kkonganti@0: ;; kkonganti@0: g) kkonganti@0: genus=${OPTARG} kkonganti@0: ;; kkonganti@0: s) kkonganti@0: species=${OPTARG} kkonganti@0: ;; kkonganti@0: ?) kkonganti@0: usage kkonganti@0: exit 0 kkonganti@0: ;; kkonganti@0: esac kkonganti@0: done kkonganti@0: kkonganti@0: kkonganti@0: kkonganti@0: if [ -n "$listdb" ]; then kkonganti@0: num_dbs=$(find "$taxonomyPath" -type d | tail -n+2 | wc -l) kkonganti@0: echo "==============================================" kkonganti@0: kkonganti@0: db_num="1" kkonganti@0: find $taxonomyPath -type d | tail -n+2 | while read -r db; do kkonganti@0: dbName=$(basename "$db") kkonganti@0: echo "${db_num}. $dbName" kkonganti@0: db_num=$(( db_num + 1 )) kkonganti@0: done kkonganti@0: echo "==============================================" kkonganti@0: echo "Number of ${prog_name} databases: $num_dbs" kkonganti@0: echo "==============================================" kkonganti@0: kkonganti@0: exit 0 kkonganti@0: fi kkonganti@0: kkonganti@0: kkonganti@0: kkonganti@0: if [ -z "$dbname" ]; then kkonganti@0: dbname="mitomine" kkonganti@0: fi kkonganti@0: kkonganti@0: if [[ -n "$genus" && -n "$species" ]]; then kkonganti@0: usage "ERROR: Only one of -g or -s needs to be defined!" kkonganti@0: exit 1 kkonganti@0: elif [ -n "$genus" ]; then kkonganti@0: check="$genus" kkonganti@0: elif [ -n "$species" ]; then kkonganti@0: check="$species" kkonganti@0: else kkonganti@0: check="" kkonganti@0: fi kkonganti@0: kkonganti@0: if [ -z "$check" ]; then kkonganti@0: usage "ERROR: -g or -s is required! check:$check" kkonganti@0: exit 1 kkonganti@0: fi kkonganti@0: kkonganti@0: lineages="$taxonomyPath/$dbname/lineages.csv" kkonganti@0: kkonganti@0: echo kkonganti@0: echo -e "Checking ${dbname} for ${CYAN}${check}${CLRESET}...\nPlease wait..." kkonganti@0: echo kkonganti@0: kkonganti@0: num=$(grep -F ",$check," "$lineages" | cut -f1 -d, | sort -u | wc -l) kkonganti@0: num_species=$(tail -n+2 "$lineages" | cut -f8 -d, | sort -u | wc -l) kkonganti@0: num_entries=$(tail -n+2 "$lineages" | wc -l) kkonganti@0: kkonganti@0: echo "$dbname brief stats" kkonganti@0: echo "==============================================" kkonganti@0: echo "DB Build: $dbBuild" kkonganti@0: echo "Number of unique species: $num_species" kkonganti@0: echo "Number of accessions in database: $num_entries" kkonganti@0: echo "==============================================" kkonganti@0: kkonganti@0: kkonganti@0: if [ "$num" -gt 0 ]; then kkonganti@0: echo kkonganti@0: echo "${GREEN}$check is present in ${dbname}${CLRESET}." kkonganti@0: echo "Number of accessions representing $check: $num" kkonganti@0: echo "==============================================" kkonganti@0: else kkonganti@0: echo "${RED}$check is absent in ${dbname}${CLRESET}." kkonganti@0: echo -e "No worries. Please request the developer of\n${prog_name} to augment the database!" kkonganti@0: echo "==============================================" kkonganti@0: fi