uawk dump: ajouter le format -v qui affiches des variables individuelles

This commit is contained in:
Jephté Clain 2016-06-10 05:37:45 +04:00
parent d57839dc3c
commit b8bf04b689
1 changed files with 52 additions and 24 deletions

View File

@ -1798,12 +1798,13 @@ Afficher les champs spécifiés pour traitement par le shell
values=() values=()
values=(value00 value01...) values=(value00 value01...)
values=(value10 value11...) values=(value10 value11...)
Bien entendu, cela n'a sens que si une seule ligne résultat est attendue.
L'option -n permet de spécifier le nom du tableau, qui vaut 'values' par L'option -n permet de spécifier le nom du tableau, qui vaut 'values' par
défaut. Avec -h, le nom par défaut est 'names' défaut. Avec -h, le nom par défaut est 'names'
Cette méthode commence par afficher de quoi initialiser le tableau à une Cette méthode commence par afficher de quoi initialiser le tableau à une
valeur vide. Ainsi, si aucune ligne n'est trouvée, le tableau est néanmoins valeur vide. Ainsi, si aucune ligne n'est trouvée, le tableau est néanmoins
initialisé. Si ce comportement n'est pas désiré, il est possible d'utiliser initialisé. Si ce comportement n'est pas désiré, il est possible d'utiliser
l'option --no-empty l'option --no-reset
-b, --array-function -b, --array-function
Afficher les champs comme l'initialisation des valeurs d'un tableau suivi de Afficher les champs comme l'initialisation des valeurs d'un tableau suivi de
l'appel d'une fonction, e.g: l'appel d'une fonction, e.g:
@ -1813,12 +1814,30 @@ Afficher les champs spécifiés pour traitement par le shell
dump dump
Le nom du tableau est fixé à 'values'. L'option -n permet de spécifier le Le nom du tableau est fixé à 'values'. L'option -n permet de spécifier le
nom de la fonction, qui vaut 'dump' par défaut. Avec -h le nom par défaut nom de la fonction, qui vaut 'dump' par défaut. Avec -h le nom par défaut
est 'dumph'" est 'dumph'
-v, --var
Affiche les champ en initialisant des variables, e.g:
names=(header0 header1)
header0=
header1=
header0=value00
header1=value01
...
header0=value10
header1=value11
...
Bien entendu, cela n'a sens que si une seule ligne résultat est attendue.
Cette option implique -h. Le nom par défaut du tableau qui liste les
variables est names.
Cette méthode commence par réinitialiser les variables à la valeur vide.
Ainsi, si aucune ligne n'est trouvée, les variables sont vides. Si ce
comportement n'est pas désiré, il est possible d'utiliser l'option
--no-reset"
function ldumpcsv() { function ldumpcsv() {
eval "$(utools_local)" eval "$(utools_local)"
local skip= parse_headers=1 keepf skipf show_headers local skip= parse_headers=1 keepf skipf show_headers
local dump=function empty=1 name hname local dump=function reset=1 name hname
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
-S:,--skip:,--skip-lines:,--skiplines: skip= \ -S:,--skip:,--skip-lines:,--skiplines: skip= \
-H,--parse-headers parse_headers=1 \ -H,--parse-headers parse_headers=1 \
@ -1830,9 +1849,10 @@ function ldumpcsv() {
--hname: hname= \ --hname: hname= \
-f,--function dump=function \ -f,--function dump=function \
-a,--array dump=array \ -a,--array dump=array \
--empty empty=1 \ --reset reset=1 \
--no-empty empty= \ --no-reset reset= \
-b,--array-function dump=array-function \ -b,--array-function dump=array-function \
-v,--var dump=var \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
args=( args=(
@ -1844,10 +1864,12 @@ function ldumpcsv() {
else array_add args -n else array_add args -n
fi fi
[ "$dump" == var ] && show_headers=1
if [ -z "$hname" ]; then if [ -z "$hname" ]; then
case "$dump" in case "$dump" in
function|array-function) hname=dumph;; function|array-function) hname=dumph;;
array) hname=names;; array|var) hname=names;;
esac esac
fi fi
if [ -z "$name" ]; then if [ -z "$name" ]; then
@ -1860,23 +1882,8 @@ function ldumpcsv() {
local -a fields local -a fields
fields=("$@") fields=("$@")
awkcsv "${args[@]}" -v show_headers:int="$show_headers" -v hname="$hname" -v name="$name" -v dump="$dump" -v empty_array:int="$empty" -v fields[@] -e ' awkcsv "${args[@]}" -v show_headers:int="$show_headers" -v hname="$hname" -v name="$name" -v dump="$dump" -v reset_values:int="$reset" -v fields[@] -e '
function init_fields() { function dump_values(name, values, dump) {
if (do_once("init_fields")) {
if (fields_count == 0) {
array_copy(fields, HEADERS)
fields_count = array_len(fields)
}
if (show_headers) {
dump_values(hname, fields)
}
if (dump == "array" && empty_array) {
array_new(empty)
dump_values(name, empty)
}
}
}
function dump_values(name, values) {
if (dump == "function") { if (dump == "function") {
print qarr(values, name) print qarr(values, name)
} else if (dump == "array") { } else if (dump == "array") {
@ -1884,6 +1891,27 @@ function dump_values(name, values) {
} else if (dump == "array-function") { } else if (dump == "array-function") {
print "values=(" qarr(values) ")" print "values=(" qarr(values) ")"
print name print name
} else if (dump == "var") {
i = 1
while (i <= fields_count) {
print fields[i] "=" qval(values[i])
i++
}
}
}
function init_fields() {
if (do_once("init_fields")) {
if (fields_count == 0) {
array_copy(fields, HEADERS)
fields_count = array_len(fields)
}
if (show_headers) {
dump_values(hname, fields, dump == "var"? "array": dump)
}
if ((dump == "array" || dump == "var") && reset_values) {
array_new(reset)
dump_values(name, reset, dump)
}
} }
} }
{ {
@ -1894,7 +1922,7 @@ function dump_values(name, values) {
values[i] = get(fields[i]) values[i] = get(fields[i])
i++ i++
} }
dump_values(name, values) dump_values(name, values, dump)
} }
END { END {
init_fields() init_fields()