X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/blobdiff_plain/48dab430af0eb368f87d6e26eb7a7afa8b728a60..3deb09c5d6894384223d30d69a3f5881ac377167:/unitproc/bkshuf diff --git a/unitproc/bkshuf b/unitproc/bkshuf old mode 100644 new mode 100755 index e41d725..ff80d8e --- a/unitproc/bkshuf +++ b/unitproc/bkshuf @@ -1,10 +1,12 @@ #!/usr/bin/env bash # Desc: Mixes input lines while also preserving some neighbors # Usage: cat file | bkshuf arg1 -# Version 0.1.1 +# Version 0.2.0 # Depends: bc 1.07.1, GNU Coreutils 8.32 (shuf) # Input: var: arg1 initial lines to output +trap 'exit;' SIGPIPE; # exit early if stdout not being read + # Load env vars ## For these numbers of lines of input... if [[ ! -v BKSHUF_PARAM_LINEC ]]; then BKSHUF_PARAM_LINEC=1000000; fi; @@ -88,7 +90,8 @@ consume_line() { line="${list_input[$ip]}"; if [[ -n $line ]]; then ##### consume line at index ip - printf "%s\n" "$line" & # print to output + printf "%s\n" "$line"; # print to output + unset "list_input[$ip]"; # destroy line in list_input array ((lc_out++)); ((lcr--)); # decrement line count remaining lcr @@ -161,6 +164,7 @@ main() { lc_out="0"; # init output line counter if [[ -z "$lc_out_max" ]]; then lc_out_max="$lco"; fi; ip="$(shuf -i0-$(( lco - 1 )) -n1)"; # init input index pointer + RANDOM="$(shuf -i0-32767 -n1)"; # init Bash PRNG n_loop1="0"; #yell "DEBUG:max_blanks:$max_blanks" while [[ $lcr -ge 1 ]] && [[ $lc_out -lt $lc_out_max ]]; do