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
|
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
||||||
# créer les liens
|
# créer les liens
|
||||||
scriptname="$(basename "$0")"
|
scriptname="$(basename "$0")"
|
||||||
for alias in awkrun awkcsv mergecsv sortcsv; do
|
for alias in awkrun awkfsv2csv awkcsv mergecsv sortcsv; do
|
||||||
ln -s "$scriptname" "$alias"
|
ln -s "$scriptname" "$alias"
|
||||||
done
|
done
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -25,6 +25,17 @@ $__AWKCSV_HELP"
|
||||||
|
|
||||||
cawkcsv "$@"
|
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
|
elif [ "$scriptname" == "mergecsv" ]; then
|
||||||
[ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: fusionner deux fichiers csv sur un champ commun
|
[ $# -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
|
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="\
|
__MERGECSV_HELP="\
|
||||||
Fusionner deux fichiers csv en faisant la correspondance sur la valeur d'un
|
Fusionner deux fichiers csv en faisant la correspondance sur la valeur d'un
|
||||||
champ, qui est la clé
|
champ, qui est la clé
|
||||||
|
|
Loading…
Reference in New Issue