Mercurial > hg > cc > cirrus_shared
view .bash_extras @ 9:f6f1deba62af default tip
sic
| author | Henry S. Thompson <ht@inf.ed.ac.uk> |
|---|---|
| date | Thu, 11 Jun 2026 21:16:59 +0100 |
| parents | 10dfd4feeaa0 |
| children |
line wrap: on
line source
# General-purpose environment variables and utility functions # Recommended for inclusion in ${HOME}/.bashrc via # source /work/dc007/dc007/shared/.bash_extras # Already sourced in singularity container _before_ bash is launched # Note that $HOME (and therefore the meaning of ~ in paths) is # set to $W in the singularity container for convenience, as it is # assumed to be where you will spend most of your time H=/home/dc007/dc007/${USER} # Only visible from login nodes W=/work/dc007/dc007/${USER} CCC=/work/dc007/shared/pod12/common_crawl SHARED=/work/dc007/dc007/shared PATH=$PATH:$HOME/.local/bin:$HOME/bin:$W/bin:$SHARED/bin export H W CCC SHARED PATH 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 "$@" # only works under sing } 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
