mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-21 14:07:53 +00:00
Improve Rhizome testdefs: add rhizome_list_unpack()
Makes all the output of a "rhizome list" command available in shell variables
This commit is contained in:
parent
7caebb97be
commit
4d54f55906
@ -78,6 +78,63 @@ assert_rhizome_list() {
|
|||||||
rhizome_list_file_count=$(( $(replayStdout | wc -l) - 2 ))
|
rhizome_list_file_count=$(( $(replayStdout | wc -l) - 2 ))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Parse the standard output produced by the immediately preceding "rhizome list"
|
||||||
|
# command into the following shell variables:
|
||||||
|
# NCOLS the number of columns
|
||||||
|
# NROWS the number of data rows (not counting headers)
|
||||||
|
# HEADER[c] the C-th header label, 0 <= C <= NCOLS-1
|
||||||
|
# <label>[R] where <label> is a header label with all non-alphanumerics
|
||||||
|
# replaced by underscore '_' and all alphas converted to upper case, eg,
|
||||||
|
# .author -> _AUTHOR, is the value of that column in the R-th row, 0 <=
|
||||||
|
# R < NROWS
|
||||||
|
#
|
||||||
|
# Warning: overwrites existing shell variables. Names of overwritten shell
|
||||||
|
# variables are derived directly from the output of rhizome list, so cannot be
|
||||||
|
# controlled. If a prefix is supplied, all variables are prefixed with that.
|
||||||
|
rhizome_list_unpack() {
|
||||||
|
local prefix="$1"
|
||||||
|
{
|
||||||
|
local n
|
||||||
|
read n
|
||||||
|
eval ${prefix}NCOLS=\"\$n\"
|
||||||
|
declare -a ${prefix}HEADER
|
||||||
|
local -a header
|
||||||
|
local oIFS="$IFS"
|
||||||
|
IFS=:
|
||||||
|
read -r -a header
|
||||||
|
IFS="$oIFS"
|
||||||
|
eval ${prefix}HEADER="(\"\${header[@]}\")"
|
||||||
|
local hdr
|
||||||
|
local -a colvars=()
|
||||||
|
for hdr in "${header[@]}"; do
|
||||||
|
case "$hdr" in
|
||||||
|
id)
|
||||||
|
hdr=BID;;
|
||||||
|
*)
|
||||||
|
hdr="${hdr//[^A-Za-z0-9_]/_}"
|
||||||
|
# hdr="${hdr^^*}" would do in Bash-4.0 and later
|
||||||
|
hdr="$(echo "$hdr" | sed -e 's/.*/\U&/')"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
colvars+=("$hdr")
|
||||||
|
done
|
||||||
|
local -a row
|
||||||
|
IFS=:
|
||||||
|
local i=0
|
||||||
|
while eval read -r -a row; do
|
||||||
|
local j=0
|
||||||
|
local val
|
||||||
|
for val in "${row[@]}"; do
|
||||||
|
eval ${prefix}${colvars[$j]}[$i]=\"\$val\"
|
||||||
|
let ++j
|
||||||
|
done
|
||||||
|
let ++i
|
||||||
|
done
|
||||||
|
IFS="$oIFS"
|
||||||
|
eval ${prefix}NROWS=$i
|
||||||
|
} < "$TFWSTDOUT"
|
||||||
|
}
|
||||||
|
|
||||||
rhizome_list_dump() {
|
rhizome_list_dump() {
|
||||||
local ncols
|
local ncols
|
||||||
local -a headers
|
local -a headers
|
||||||
|
Loading…
Reference in New Issue
Block a user