ajout de awkfsv2csv
This commit is contained in:
parent
0fb65ad026
commit
8989f00231
13
uawk
13
uawk
|
@ -4,7 +4,7 @@
|
|||
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
||||
# créer les liens
|
||||
scriptname="$(basename "$0")"
|
||||
for alias in awkrun awkcsv mergecsv sortcsv; do
|
||||
for alias in awkrun awkfsv2csv awkcsv mergecsv sortcsv; do
|
||||
ln -s "$scriptname" "$alias"
|
||||
done
|
||||
exit 0
|
||||
|
@ -25,6 +25,17 @@ $__AWKCSV_HELP"
|
|||
|
||||
cawkcsv "$@"
|
||||
|
||||
elif [ "$scriptname" == "awkfsv2csv" ]; then
|
||||
[ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk pour transformer un fichier à colonnes fixes en fichier csv
|
||||
note: ce script ne tient pas compte de la locale: il travaille avec LANG=C
|
||||
|
||||
USAGE
|
||||
$scriptname [header:sizes...]
|
||||
|
||||
$__AWKFSV2CSV_HELP"
|
||||
|
||||
cawkfsv2csv "$@"
|
||||
|
||||
elif [ "$scriptname" == "mergecsv" ]; then
|
||||
[ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: fusionner deux fichiers csv sur un champ commun
|
||||
note: ce script ne tient pas compte de la locale: il travaille avec LANG=C
|
||||
|
|
|
@ -1 +1 @@
|
|||
18
|
||||
19
|
||||
|
|
73
ulib/awk
73
ulib/awk
|
@ -754,6 +754,79 @@ function awkcsv() { LANG=C lawkcsv "$@"; }
|
|||
|
||||
################################################################################
|
||||
|
||||
__AWKFSV2CSV_HELP="\
|
||||
Transformer un flux fsv (colonnes à largeurs fixes) en csv
|
||||
|
||||
Analyse du flux en entrée:
|
||||
-s, --skip-lines nblines
|
||||
Sauter nblines au début du flux
|
||||
|
||||
Chaque argument doit être de la forme [-]header:size. La colonne sera incluse
|
||||
dans le fichier en sortie, sauf si elle est précédée de -
|
||||
|
||||
Flux en sortie:
|
||||
-n, --no-headers
|
||||
Ne pas afficher les en-têtes. Par défaut, les en-têtes sont affichés."
|
||||
|
||||
function lawkfsv2csv() {
|
||||
local -a args headersizes
|
||||
local skip_lines=0 show_headers=1
|
||||
if parse_opts \
|
||||
-s:,--skip-lines: skip_lines= \
|
||||
-n,--no-headers show_headers= \
|
||||
--show-headers show_headers=1 \
|
||||
@ args -- "$@"; then
|
||||
set -- "${args[@]}"
|
||||
else
|
||||
eerror "$args"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local -a headers starts sizes
|
||||
local headersize header i size
|
||||
i=1
|
||||
for headersize in "$@"; do
|
||||
splitpair "$headersize" header size
|
||||
[ -n "$header" ] || {
|
||||
eerror "header est requis"
|
||||
return 1
|
||||
}
|
||||
[ -n "$size" ] || size=1
|
||||
if [ "${header#-}" == "$header" ]; then
|
||||
array_add headers "$header"
|
||||
array_add starts "$i"
|
||||
array_add sizes "$size"
|
||||
fi
|
||||
i="$(($i + $size))"
|
||||
done
|
||||
|
||||
awkrun -f \
|
||||
skip_lines:int="$skip_lines" show_headers:int="$show_headers" \
|
||||
headers[@] starts[@] sizes[@] \
|
||||
"$__AWKCSV_FUNCTIONS"'
|
||||
BEGIN {
|
||||
if (show_headers) {
|
||||
print array_formatcsv(headers)
|
||||
}
|
||||
}
|
||||
NR <= skip_lines { next }
|
||||
{
|
||||
line = $0
|
||||
$0 = ""
|
||||
for (i=1; i <= headers_count; i++) {
|
||||
$i = substr(line, starts[i], sizes[i])
|
||||
}
|
||||
formatcsv()
|
||||
print
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
function cawkfsv2csv() { LANG=C lawkfsv2csv "$@"; }
|
||||
function awkfsv2csv() { LANG=C lawkfsv2csv "$@"; }
|
||||
|
||||
################################################################################
|
||||
|
||||
__MERGECSV_HELP="\
|
||||
Fusionner deux fichiers csv en faisant la correspondance sur la valeur d'un
|
||||
champ, qui est la clé
|
||||
|
|
Loading…
Reference in New Issue