dumpcsv: ajouter les options --keep-fields, --skip-fields, --dump-headers

This commit is contained in:
Jephte CLAIN 2016-03-01 00:28:27 +04:00
parent af183325fe
commit 903d500c14
1 changed files with 44 additions and 14 deletions

View File

@ -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 "$@"; }