annotate .bash_extras @ 1:fef95c7a391f

for general use...
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Sat, 28 Feb 2026 15:51:58 +0000
parents
children 6c772ae7fce2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
1 # Sourced by .bashrc and singularity runscript
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
2
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
3 cu ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
4 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
5 cvs update "$@" | egrep -v '^\?'
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
6 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
7
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
8 lss ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
9 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
10 ls -F --color=auto -lS "$@" | {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
11 read one;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
12 if [ -n "$one" -a "${one::5}" \!= "total" ]; then
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
13 echo "$one";
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
14 fi;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
15 cat
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
16 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
17 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
18
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
19 ff ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
20 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
21 pat=$1;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
22 shift;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
23 find . -iname "*$pat*" $@
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
24 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
25
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
26 typecat ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
27 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
28 tt=$(type $1);
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
29 case $tt in
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
30 *\ is\ hashed\ *)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
31 cat $(echo $tt | cut -f 4 -d ' ' | tr -d '()')
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
32 ;;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
33 *\ is\ /*)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
34 cat $(echo $tt | cut -f 3 -d ' ' | tr -d '()')
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
35 ;;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
36 *)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
37 type $1
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
38 ;;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
39 esac
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
40 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
41
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
42 sus ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
43 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
44 sort "$@" | uniq -c | sort -k1nr,1
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
45 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
46
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
47 uz ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
48 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
49 igzip -dc "$@"
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
50 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
51
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
52 function tot ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
53 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
54 awk '{sum+=$1} END {printf "%u\n",sum}'
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
55 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
56
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
57 btot ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
58 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
59 python3 -c 'import sys
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
60 multiCol = dostats = sample = False
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
61 c = ""
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
62 p = 0
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
63 q = None
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
64 d = 2
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
65 ssq = 0
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
66 while len(sys.argv)>1:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
67 if multiCol and sys.argv[1][0]!="-":
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
68 p=1
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
69 q=int(sys.argv.pop(1))
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
70 elif sys.argv[1]=="-c":
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
71 # add commas
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
72 c = ","
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
73 sys.argv.pop(1)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
74 elif sys.argv[1]=="-a":
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
75 # do sum etc. for all columns [p]:q
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
76 multiCol = True
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
77 sys.argv.pop(1)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
78 try:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
79 q = int(sys.argv.pop(1))
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
80 except IndexError:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
81 print("you must supply an N for multi-column")
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
82 exit(1)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
83 elif sys.argv[1]=="-s":
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
84 # include mean and sample stdev
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
85 dostats = True
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
86 sample = True
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
87 sys.argv.pop(1)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
88 elif sys.argv[1]=="-p":
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
89 # include mean and population stdev
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
90 dostats = True
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
91 sys.argv.pop(1)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
92 elif sys.argv[1]=="-d":
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
93 sys.argv.pop(1)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
94 d=int(sys.argv.pop(1))
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
95 else:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
96 break
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
97 n=0
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
98 if multiCol:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
99 w=q-p
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
100 import numpy as np
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
101 s=np.array([0]*w)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
102 n=np.array([0]*w)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
103 if dostats:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
104 ssq=np.array([0]*w)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
105 else:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
106 s=0
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
107 if dostats:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
108 ssq=0
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
109 import math
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
110 for l in sys.stdin: # ["1 11\n","2 22\n"]:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
111 try:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
112 if multiCol:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
113 ll=l.split()[p:q]
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
114 ii=np.array([(0 if i.startswith("NaN") else int(i)) for i in ll])
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
115 s+=ii
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
116 ssq+=ii*ii
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
117 n+=np.array([(0 if i.startswith("NaN") else 1) for i in ll])
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
118 else:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
119 if l[0]!="N":
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
120 i=int(l)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
121 s+=i
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
122 if dostats:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
123 ssq+=(i*i)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
124 n+=1
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
125 except (NameError,ValueError) as e:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
126 print(l,e,file=sys.stderr)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
127 if dostats:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
128 if multiCol:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
129 m=s/n
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
130 var=(ssq/n)-pow(m,2)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
131 if sample:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
132 var=(n/(n-1))*var
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
133 sd=pow(var,0.5)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
134 else:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
135 m=float(s)/float(n)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
136 var=(float(ssq)/float(n))-pow(float(m),2)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
137 if sample:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
138 var=(float(n)/float(n-1))*var
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
139 sd=math.sqrt(var)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
140 if dostats:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
141 if multiCol:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
142 print("\t".join(f"{i:{c}.{d}f}" for i in s))
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
143 print("\t".join(f"{i:{c}.{d}f}" for i in m))
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
144 print("\t".join(f"{i:{c}.{d}f}" for i in sd))
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
145 else:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
146 print(f"{s:}\t{m:}\t{sd:}")
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
147 else:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
148 if multiCol:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
149 print("\t".join(f"{i:}" for i in s))
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
150 else:
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
151 print(f"{s:}")
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
152
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
153 ' "$@"
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
154 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
155
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
156 headtail ()
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
157 {
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
158 case "$1" in -*)
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
159 n="$1"
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
160 shift
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
161 ;;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
162 *) n="-10"
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
163 ;;
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
164 esac
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
165 cat "$@" | { sed -u ${n:1}q ; echo === ; tail $n ; }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
166 }
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
167
fef95c7a391f for general use...
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
168 export -f cu lss ff typecat sus uz tot btot headtail