|
1
|
1 #!/bin/bash
|
|
|
2
|
|
|
3 # Sorting of GFF files.
|
|
|
4 #
|
|
|
5 # USAGE: sort_gff.sh [OPTIONS] -i IN.roi -o OUT.roi
|
|
|
6 #
|
|
|
7 # Options:
|
|
|
8 # -r reverse orientation
|
|
|
9 # -p sort by position (ref, start, end) -- default
|
|
|
10
|
|
|
11 # The parameters that we will pass to sort.
|
|
|
12 SORT_POS_ARGS="-k 1,1 -k 2,2n -k 3,3n"
|
|
|
13 SORT_POS_ARGS_REV="-k 1,1r -k 2,2nr -k 3,3nr"
|
|
|
14
|
|
|
15 # The arguments will go here.
|
|
|
16 SORT_BY=beginPos
|
|
|
17 REVERSE=
|
|
|
18
|
|
|
19 # Parse option values.
|
|
|
20 while getopts "pc:i:o:n:r" opt; do
|
|
|
21 case $opt in
|
|
|
22 i)
|
|
|
23 IN_FILE=$OPTARG
|
|
|
24 ;;
|
|
|
25 o)
|
|
|
26 OUT_FILE=$OPTARG
|
|
|
27 ;;
|
|
|
28 r)
|
|
|
29 REVERSE=r
|
|
|
30 ;;
|
|
|
31 \?)
|
|
|
32 echo "Invalid option: -$OPTARG" >&2
|
|
|
33 exit 1
|
|
|
34 ;;
|
|
|
35 esac
|
|
|
36 done
|
|
|
37
|
|
|
38 # Check that -i or -o are given.
|
|
|
39 if [[ "$IN_FILE" == "" || "$OUT_FILE" == "" ]]; then
|
|
|
40 echo "Missing option -i or -o" >&2
|
|
|
41 exit 1
|
|
|
42 fi
|
|
|
43
|
|
|
44 # Setup sort args.
|
|
|
45 case $SORT_BY in
|
|
|
46 beginPos)
|
|
|
47 if [[ "$REVERSE" == "r" ]]; then
|
|
|
48 SORT_ARGS=${SORT_POS_ARGS_REV}
|
|
|
49 else
|
|
|
50 SORT_ARGS=${SORT_POS_ARGS}
|
|
|
51 fi
|
|
|
52 ;;
|
|
|
53 esac
|
|
|
54
|
|
|
55 # Execute sorting.
|
|
|
56 #echo "OUT_FILE=${OUT_FILE}" 2>&2
|
|
|
57 #echo "SORT_ARGS=${SORT_ARGS}" 1>&2
|
|
|
58 (
|
|
|
59 export LC_ALL=C
|
|
|
60 #echo "sort ${SORT_ARGS} <(grep -v '^#' ${IN_FILE});" 1>&2
|
|
|
61 sort ${SORT_ARGS} <(grep -v '^#' ${IN_FILE});
|
|
|
62 ) > ${OUT_FILE}
|
|
|
63
|
|
|
64 exit $?
|