# LECA Bash library # # The LECA bash library provides a set of function used for helping # development of bash script mainly to write job script on the luke # cluster # # The files from the LECA Bash library must be sourced from your main script # # include logging include ifs logdebug "Load sets package" function newset() { eval declare -a "${1}" } function setsize() { eval "echo \${#${1}[@]}" } function setaddvalue() { local S="${1}" local V="${2}" eval $S[$(setsize $S)]=$V pushifs $'\n' eval "$S=(\$(echo \"\${$S[*]}\" | sort -u))" popifs } function setdelvalue() { local S="${1}" local V="${2}" pushifs $'\n' eval "$S=(\$(echo \"\${$S[*]}\" | grep -v \"$V\"))" popifs } function setcontains() { local S="${1}" local V="${2}" pushifs $'\n' eval "echo \"\${$S[*]}\" | grep -q \"$V\"" popifs local status=$? return $status } function setunion() { local S="${1}" local S1="${2}" local S2="${3}" pushifs $'\n' eval "$S=(\$((echo \"\${$S1[*]}\";echo \"\${$S2[*]}\") | sort -u))" popifs } function setintersec() { local S="${1}" local S1="${2}" local S2="${3}" pushifs $'\n' eval "$S=(\$((echo \"\${$S1[*]}\";echo \"\${$S2[*]}\") | \ sort | \ uniq -c | \ awk '(\$1==2)' | \ sed 's/^ *2 //'))" popifs }