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="\
|
||||
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
|
||||
-h, -H, --parse-headers
|
||||
-H, --parse-headers
|
||||
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
|
||||
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
|
||||
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
|
||||
Spécifier le nom pour les options -f, -a, etc.
|
||||
-f, --function
|
||||
|
@ -1788,19 +1798,26 @@ Afficher les champs spécifiés pour traitement par le shell
|
|||
|
||||
function ldumpcsv() {
|
||||
eval "$(utools_local)"
|
||||
local skip= parse_headers=1
|
||||
local skip= parse_headers=1 keepf skipf show_headers
|
||||
local name dump=function
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
-s:,-S:,--skip:,--skip-lines:,--skiplines: skip= \
|
||||
-h,-H,--parse-headers parse_headers=1 \
|
||||
-S:,--skip:,--skip-lines:,--skiplines: skip= \
|
||||
-H,--parse-headers parse_headers=1 \
|
||||
-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= \
|
||||
-f,--function dump=function \
|
||||
-a,--array dump=array \
|
||||
-b,--array-function dump=array-function \
|
||||
@ 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
|
||||
else array_add args -n
|
||||
fi
|
||||
|
@ -1815,13 +1832,8 @@ function ldumpcsv() {
|
|||
local -a fields
|
||||
fields=("$@")
|
||||
|
||||
awkcsv "${args[@]}" -v name="$name" -v dump="$dump" -v fields[@] -a '{
|
||||
array_new(values)
|
||||
i = 1
|
||||
while (i <= fields_count) {
|
||||
values[i] = get(fields[i])
|
||||
i++
|
||||
}
|
||||
awkcsv "${args[@]}" -v show_headers:int="$show_headers" -v name="$name" -v dump="$dump" -v fields[@] -e '
|
||||
function dump_values(values) {
|
||||
if (dump == "function") {
|
||||
print qarr(values, name)
|
||||
} else if (dump == "array") {
|
||||
|
@ -1830,7 +1842,25 @@ function ldumpcsv() {
|
|||
print "values=(" qarr(values) ")"
|
||||
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 "$@"; }
|
||||
|
|
Loading…
Reference in New Issue