From b8bf04b68995a036813ffb8ea8b62fa7c9852ac1 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 10 Jun 2016 05:37:45 +0400 Subject: [PATCH] uawk dump: ajouter le format -v qui affiches des variables individuelles --- lib/ulib/awk | 76 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 24 deletions(-) diff --git a/lib/ulib/awk b/lib/ulib/awk index bb9f317..8bd0207 100644 --- a/lib/ulib/awk +++ b/lib/ulib/awk @@ -1798,12 +1798,13 @@ Afficher les champs spécifiés pour traitement par le shell values=() values=(value00 value01...) 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 défaut. Avec -h, le nom par défaut est 'names' 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 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 Afficher les champs comme l'initialisation des valeurs d'un tableau suivi de l'appel d'une fonction, e.g: @@ -1813,12 +1814,30 @@ Afficher les champs spécifiés pour traitement par le shell dump 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 - 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() { eval "$(utools_local)" 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[@]}" \ -S:,--skip:,--skip-lines:,--skiplines: skip= \ -H,--parse-headers parse_headers=1 \ @@ -1830,9 +1849,10 @@ function ldumpcsv() { --hname: hname= \ -f,--function dump=function \ -a,--array dump=array \ - --empty empty=1 \ - --no-empty empty= \ + --reset reset=1 \ + --no-reset reset= \ -b,--array-function dump=array-function \ + -v,--var dump=var \ @ args -- "$@" && set -- "${args[@]}" || die "$args" args=( @@ -1844,10 +1864,12 @@ function ldumpcsv() { else array_add args -n fi + [ "$dump" == var ] && show_headers=1 + if [ -z "$hname" ]; then case "$dump" in function|array-function) hname=dumph;; - array) hname=names;; + array|var) hname=names;; esac fi if [ -z "$name" ]; then @@ -1860,23 +1882,8 @@ function ldumpcsv() { local -a 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 ' -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) - } - if (dump == "array" && empty_array) { - array_new(empty) - dump_values(name, empty) - } - } -} -function dump_values(name, values) { + 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 dump_values(name, values, dump) { if (dump == "function") { print qarr(values, name) } else if (dump == "array") { @@ -1884,6 +1891,27 @@ function dump_values(name, values) { } else if (dump == "array-function") { print "values=(" qarr(values) ")" 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]) i++ } - dump_values(name, values) + dump_values(name, values, dump) } END { init_fields()