dumpcsv: ajouter les options --keep-fields, --skip-fields, --dump-headers
This commit is contained in:
parent
af183325fe
commit
903d500c14
58
lib/ulib/awk
58
lib/ulib/awk
|
@ -1751,9 +1751,9 @@ function sortcsv() { LANG=C lsortcsv "$@"; }
|
||||||
__DUMPCSV_HELP="\
|
__DUMPCSV_HELP="\
|
||||||
Afficher les champs spécifiés pour traitement par le shell
|
Afficher les champs spécifiés pour traitement par le shell
|
||||||
|
|
||||||
-s, -S, --skip-lines nblines
|
-S, --skip-lines nblines
|
||||||
Sauter nblines au début du flux
|
Sauter nblines au début du flux
|
||||||
-h, -H, --parse-headers
|
-H, --parse-headers
|
||||||
Lire la liste des champs à partir de la première ligne non ignorée du flux.
|
Lire la liste des champs à partir de la première ligne non ignorée du flux.
|
||||||
Si cette option est spécifiée (ce qui est le cas par défaut), les champs
|
Si cette option est spécifiée (ce qui est le cas par défaut), les champs
|
||||||
spécifiés peuvent être les noms effectifs des champs. Sinon, les champs ne
|
spécifiés peuvent être les noms effectifs des champs. Sinon, les champs ne
|
||||||
|
@ -1762,6 +1762,16 @@ Afficher les champs spécifiés pour traitement par le shell
|
||||||
Ne pas analyser la première ligne pour les noms des champs. Les champs
|
Ne pas analyser la première ligne pour les noms des champs. Les champs
|
||||||
spécifiés ne peuvent être que numériques.
|
spécifiés ne peuvent être que numériques.
|
||||||
|
|
||||||
|
-k, --keep-fields KEEPFIELDS
|
||||||
|
Garder les champs spécifiés. Les autres sont supprimés de la sortie.
|
||||||
|
KEEPFIELDS est une liste de champs séparés par des virgules.
|
||||||
|
-s, --skip-fields SKIPFIELDS
|
||||||
|
Exclure les champs spécifiés. SKIPFIELDS est une liste de champs séparés par
|
||||||
|
des virgules.
|
||||||
|
-h, --dump-headers
|
||||||
|
Inclure les en-têtes dans la sortie. Elles sont traitées exactement comme
|
||||||
|
une ligne de données.
|
||||||
|
|
||||||
-n, --name NAME
|
-n, --name NAME
|
||||||
Spécifier le nom pour les options -f, -a, etc.
|
Spécifier le nom pour les options -f, -a, etc.
|
||||||
-f, --function
|
-f, --function
|
||||||
|
@ -1788,19 +1798,26 @@ Afficher les champs spécifiés pour traitement par le shell
|
||||||
|
|
||||||
function ldumpcsv() {
|
function ldumpcsv() {
|
||||||
eval "$(utools_local)"
|
eval "$(utools_local)"
|
||||||
local skip= parse_headers=1
|
local skip= parse_headers=1 keepf skipf show_headers
|
||||||
local name dump=function
|
local name dump=function
|
||||||
parse_opts "${PRETTYOPTS[@]}" \
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
-s:,-S:,--skip:,--skip-lines:,--skiplines: skip= \
|
-S:,--skip:,--skip-lines:,--skiplines: skip= \
|
||||||
-h,-H,--parse-headers parse_headers=1 \
|
-H,--parse-headers parse_headers=1 \
|
||||||
-N,--numkeys parse_headers= \
|
-N,--numkeys parse_headers= \
|
||||||
|
-k:,--keep:,--keep-fields:,--keepfields: keepf= \
|
||||||
|
-s:,--skip:,--skip-fields:,--skipfields: skipf= \
|
||||||
|
-h,--dump-headers show_headers=1 \
|
||||||
-n:,--name: name= \
|
-n:,--name: name= \
|
||||||
-f,--function dump=function \
|
-f,--function dump=function \
|
||||||
-a,--array dump=array \
|
-a,--array dump=array \
|
||||||
-b,--array-function dump=array-function \
|
-b,--array-function dump=array-function \
|
||||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
args=(${skip:+--skip-lines "$skip"})
|
args=(
|
||||||
|
${skip:+--skip-lines "$skip"}
|
||||||
|
${keepf:+--keep-fields "$keepf"}
|
||||||
|
${skipf:+--skip-fields "$skipf"}
|
||||||
|
)
|
||||||
if [ -n "$parse_headers" ]; then array_add args -h
|
if [ -n "$parse_headers" ]; then array_add args -h
|
||||||
else array_add args -n
|
else array_add args -n
|
||||||
fi
|
fi
|
||||||
|
@ -1815,13 +1832,8 @@ function ldumpcsv() {
|
||||||
local -a fields
|
local -a fields
|
||||||
fields=("$@")
|
fields=("$@")
|
||||||
|
|
||||||
awkcsv "${args[@]}" -v name="$name" -v dump="$dump" -v fields[@] -a '{
|
awkcsv "${args[@]}" -v show_headers:int="$show_headers" -v name="$name" -v dump="$dump" -v fields[@] -e '
|
||||||
array_new(values)
|
function dump_values(values) {
|
||||||
i = 1
|
|
||||||
while (i <= fields_count) {
|
|
||||||
values[i] = get(fields[i])
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
if (dump == "function") {
|
if (dump == "function") {
|
||||||
print qarr(values, name)
|
print qarr(values, name)
|
||||||
} else if (dump == "array") {
|
} else if (dump == "array") {
|
||||||
|
@ -1830,7 +1842,25 @@ function ldumpcsv() {
|
||||||
print "values=(" qarr(values) ")"
|
print "values=(" qarr(values) ")"
|
||||||
print name
|
print name
|
||||||
}
|
}
|
||||||
}'
|
}
|
||||||
|
{
|
||||||
|
if (do_once("init_fields")) {
|
||||||
|
if (fields_count == 0) {
|
||||||
|
array_copy(fields, HEADERS)
|
||||||
|
fields_count = array_len(fields)
|
||||||
|
}
|
||||||
|
if (show_headers) {
|
||||||
|
dump_values(fields)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
array_new(values)
|
||||||
|
i = 1
|
||||||
|
while (i <= fields_count) {
|
||||||
|
values[i] = get(fields[i])
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
dump_values(values)
|
||||||
|
}' -a ''
|
||||||
}
|
}
|
||||||
|
|
||||||
function cdumpcsv() { LANG=C ldumpcsv "$@"; }
|
function cdumpcsv() { LANG=C ldumpcsv "$@"; }
|
||||||
|
|
Loading…
Reference in New Issue