diff gff_sort.sh @ 1:0ac4f6f3d984 draft

Uploaded
author holtgrewe
date Mon, 06 May 2013 12:34:43 -0400
parents
children 19597b57ada8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gff_sort.sh	Mon May 06 12:34:43 2013 -0400
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# Sorting of GFF files.
+#
+# USAGE: sort_gff.sh [OPTIONS] -i IN.roi -o OUT.roi
+#
+# Options:
+#   -r     reverse orientation
+#   -p     sort by position (ref, start, end) -- default
+
+# The parameters that we will pass to sort.
+SORT_POS_ARGS="-k 1,1 -k 2,2n -k 3,3n"
+SORT_POS_ARGS_REV="-k 1,1r -k 2,2nr -k 3,3nr"
+
+# The arguments will go here.
+SORT_BY=beginPos
+REVERSE=
+
+# Parse option values.
+while getopts "pc:i:o:n:r" opt; do
+    case $opt in
+        i)
+            IN_FILE=$OPTARG
+            ;;
+        o)
+            OUT_FILE=$OPTARG
+            ;;
+        r)
+            REVERSE=r
+            ;;
+        \?)
+            echo "Invalid option: -$OPTARG" >&2
+            exit 1
+            ;;
+    esac
+done
+
+# Check that -i or -o are given.
+if [[ "$IN_FILE" == "" || "$OUT_FILE" == "" ]]; then
+    echo "Missing option -i or -o" >&2
+    exit 1
+fi
+
+# Setup sort args.
+case $SORT_BY in
+    beginPos)
+        if [[ "$REVERSE" == "r" ]]; then
+            SORT_ARGS=${SORT_POS_ARGS_REV}
+        else
+            SORT_ARGS=${SORT_POS_ARGS}
+        fi
+        ;;
+esac
+
+# Execute sorting.
+#echo "OUT_FILE=${OUT_FILE}" 2>&2
+#echo "SORT_ARGS=${SORT_ARGS}" 1>&2
+(
+    export LC_ALL=C
+    #echo "sort ${SORT_ARGS} <(grep -v '^#' ${IN_FILE});" 1>&2
+    sort ${SORT_ARGS} <(grep -v '^#' ${IN_FILE});
+) > ${OUT_FILE}
+
+exit $?