changeset 1:fef95c7a391f

for general use...
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Sat, 28 Feb 2026 15:51:58 +0000
parents a6c7f23cca94
children 345f8b12fd2f
files .bash_extras .bash_profile
diffstat 2 files changed, 176 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.bash_extras	Sat Feb 28 15:51:58 2026 +0000
@@ -0,0 +1,168 @@
+# Sourced by .bashrc and singularity runscript
+
+cu ()
+{
+    cvs update "$@" | egrep -v '^\?'
+}
+
+lss ()
+{ 
+    ls -F --color=auto -lS "$@" | { 
+        read one;
+        if [ -n "$one" -a "${one::5}" \!= "total" ]; then
+            echo "$one";
+        fi;
+        cat
+    }
+}
+
+ff ()
+{
+    pat=$1;
+    shift;
+    find . -iname "*$pat*" $@
+}
+
+typecat () 
+{ 
+    tt=$(type $1);
+    case $tt in 
+        *\ is\ hashed\ *)
+            cat $(echo $tt | cut -f 4 -d ' ' | tr -d '()')
+        ;;
+        *\ is\ /*)
+            cat $(echo $tt | cut -f 3 -d ' ' | tr -d '()')
+        ;;
+        *)
+            type $1
+        ;;
+    esac
+}
+
+sus () 
+{ 
+    sort "$@" | uniq -c | sort -k1nr,1
+}
+
+uz () 
+{ 
+    igzip -dc "$@"
+}
+
+function tot ()
+{
+    awk '{sum+=$1} END {printf "%u\n",sum}'
+}
+
+btot ()
+{
+    python3 -c 'import sys
+multiCol = dostats = sample = False
+c = ""
+p = 0
+q = None
+d = 2
+ssq = 0
+while len(sys.argv)>1:
+  if multiCol and sys.argv[1][0]!="-":
+      p=1
+      q=int(sys.argv.pop(1))
+  elif sys.argv[1]=="-c":
+    # add commas
+    c = ","
+    sys.argv.pop(1)
+  elif sys.argv[1]=="-a":
+    # do sum etc. for all columns [p]:q
+    multiCol = True
+    sys.argv.pop(1)
+    try:
+      q = int(sys.argv.pop(1))
+    except IndexError:
+      print("you must supply an N for multi-column")
+      exit(1)
+  elif sys.argv[1]=="-s":
+    # include mean and sample stdev
+    dostats = True
+    sample = True
+    sys.argv.pop(1)
+  elif sys.argv[1]=="-p":
+    # include mean and population stdev
+    dostats = True
+    sys.argv.pop(1)
+  elif sys.argv[1]=="-d":
+    sys.argv.pop(1)
+    d=int(sys.argv.pop(1))
+  else:
+    break
+n=0
+if multiCol:
+  w=q-p
+  import numpy as np
+  s=np.array([0]*w)
+  n=np.array([0]*w)
+  if dostats:
+    ssq=np.array([0]*w)
+else:
+  s=0
+  if dostats:
+    ssq=0
+    import math
+for l in sys.stdin: # ["1 11\n","2 22\n"]:
+  try:
+    if multiCol:
+      ll=l.split()[p:q]
+      ii=np.array([(0 if i.startswith("NaN") else int(i)) for i in ll])
+      s+=ii
+      ssq+=ii*ii
+      n+=np.array([(0 if i.startswith("NaN") else 1) for i in ll])
+    else:
+      if l[0]!="N":
+        i=int(l)
+        s+=i
+        if dostats:
+          ssq+=(i*i)
+          n+=1
+  except (NameError,ValueError) as e:
+    print(l,e,file=sys.stderr)
+if dostats:
+  if multiCol:
+    m=s/n
+    var=(ssq/n)-pow(m,2)
+    if sample:
+      var=(n/(n-1))*var
+    sd=pow(var,0.5)
+  else:
+    m=float(s)/float(n)
+    var=(float(ssq)/float(n))-pow(float(m),2)
+    if sample:
+      var=(float(n)/float(n-1))*var
+    sd=math.sqrt(var)
+if dostats:
+  if multiCol:
+    print("\t".join(f"{i:{c}.{d}f}" for i in s))
+    print("\t".join(f"{i:{c}.{d}f}" for i in m))
+    print("\t".join(f"{i:{c}.{d}f}" for i in sd))
+  else:
+    print(f"{s:}\t{m:}\t{sd:}")
+else:
+  if multiCol:
+    print("\t".join(f"{i:}" for i in s))
+  else:
+    print(f"{s:}")
+
+' "$@"
+}
+
+headtail ()
+{
+case "$1" in -*)
+ n="$1"
+ shift
+ ;;
+ *) n="-10"
+ ;;
+esac
+cat "$@" | { sed -u ${n:1}q ; echo === ; tail $n ; }
+}
+
+export -f cu lss ff typecat sus uz tot btot headtail
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.bash_profile	Sat Feb 28 15:51:58 2026 +0000
@@ -0,0 +1,8 @@
+# .bash_profile
+
+# Get the aliases and functions
+if [ -f ~/.bashrc ]; then
+	. ~/.bashrc
+fi
+
+# User specific environment and startup programs