diff --git a/uawk b/uawk index 9ddf93a..5ed1e50 100755 --- a/uawk +++ b/uawk @@ -1,13 +1,13 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -ALIASES=(awkrun awkfsv2csv awkcsv grepcsv mergecsv sortcsv) +TOOLS=(awkrun awkcsv grepcsv awkfsv2csv mergecsv sortcsv) if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then # créer les liens scriptname="$(basename "$0")" - for alias in "${ALIASES[@]}"; do - ln -s "$scriptname" "$alias" - ln -s "$scriptname" "l$alias" + for tool in "${TOOLS[@]}"; do + ln -s "$scriptname" "$tool" + ln -s "$scriptname" "l$tool" done exit 0 fi @@ -15,77 +15,46 @@ fi source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS awk -# si on lance le script uawk, donner la possibilité de choisir l'outil -if [ "$scriptname" == uawk ] && array_contains ALIASES "${1#l}"; then +# si on lance le script avec le nom uawk, il faut spécifier l'outil à +# utiliser +if [ "$scriptname" == uawk ]; then + if [ $# -eq 1 -a "$1" == --help ]; then + exit_with uecho "$scriptname: wrapper pour des outils implémentés en awk + +USAGE + $scriptname TOOL args... + +Les noms d'outils valides sont: ${TOOLS[*]} +Utiliser l'option --help pour obtenir de l'aide sur chacun des outils" + fi scriptname="$1" shift fi # choix de la version des scripts: tient compte de la locale ou non -if [ "${scriptname#l}" != "$scriptname" ]; then +tool="${scriptname#l}" +if [ "$tool" != "$scriptname" ]; then + toolprefix=l prefix=l Clang= else + toolprefix= prefix=c Clang=1 fi -if [ "${scriptname#l}" == "awkcsv" ]; then - [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk pour traiter des fichier csv -${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C -} -USAGE - $scriptname [-b before] -e script [-a after] -- [headers...] [-- inputfiles...] +# Aliases pour les noms d'outils +case "$tool" in +run) tool=awkrun;; +csv) tool=awkcsv;; +grep) tool=grepcsv;; +fsv2csv|fsv) tool=awkfsv2csv;; +merge) tool=mergecsv;; +sort) tool=sortcsv;; +esac +scriptname="$toolprefix$tool" -$__AWKCSV_HELP" - - "${prefix}awkcsv" "$@" - -elif [ "${scriptname#l}" == "grepcsv" ]; then - [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk pour rechercher des lignes d'un fichier csv -${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C -} -USAGE - $scriptname EXPR [inputfiles...] [-- headers...] - -$__GREPCSV_HELP" - - "${prefix}grepcsv" "$@" - -elif [ "${scriptname#l}" == "awkfsv2csv" ]; then - [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk pour transformer un fichier à colonnes fixes en fichier csv -${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C -} -USAGE - $scriptname [options] -- [header:sizes...] [-- inputfiles...] - -$__AWKFSV2CSV_HELP" - - "${prefix}awkfsv2csv" "$@" - -elif [ "${scriptname#l}" == "mergecsv" ]; then - [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: fusionner deux fichiers csv sur un champ commun -${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C -} -USAGE - $scriptname [options] left right -k field - -$__MERGECSV_HELP" - - "${prefix}mergecsv" "$@" - -elif [ "${scriptname#l}" == "sortcsv" ]; then - [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: trier un fichier csv sur un champ -${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C -} -USAGE - $scriptname [options] input -k field - -$__SORTCSV_HELP" - - "${prefix}sortcsv" "$@" - -else +if [ "$tool" == "awkrun" ]; then [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk rajoutant des fonctions supplémentaires ${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C } @@ -97,4 +66,64 @@ Lancer awk avec un script préparé de la manière spécifiée ci dessous. $__AWKDEF_HELP" "${prefix}awkrun" -f "$@" + +elif [ "$tool" == "awkcsv" ]; then + [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk pour traiter des fichier csv +${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C +} +USAGE + $scriptname [-b before] -e script [-a after] -- [headers...] [-- inputfiles...] + +$__AWKCSV_HELP" + + "${prefix}awkcsv" "$@" + +elif [ "$tool" == "grepcsv" ]; then + [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk pour rechercher des lignes d'un fichier csv +${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C +} +USAGE + $scriptname EXPR [inputfiles...] [-- headers...] + +$__GREPCSV_HELP" + + "${prefix}grepcsv" "$@" + +elif [ "$tool" == "awkfsv2csv" ]; then + [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: wrapper autour de awk pour transformer un fichier à colonnes fixes en fichier csv +${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C +} +USAGE + $scriptname [options] -- [header:sizes...] [-- inputfiles...] + +$__AWKFSV2CSV_HELP" + + "${prefix}awkfsv2csv" "$@" + +elif [ "$tool" == "mergecsv" ]; then + [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: fusionner deux fichiers csv sur un champ commun +${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C +} +USAGE + $scriptname [options] left right -k field + +$__MERGECSV_HELP" + + "${prefix}mergecsv" "$@" + +elif [ "$tool" == "sortcsv" ]; then + [ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: trier un fichier csv sur un champ +${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C +} +USAGE + $scriptname [options] input -k field + +$__SORTCSV_HELP" + + "${prefix}sortcsv" "$@" + +elif [ -n "$scriptname" ]; then + die "$scriptname: nom d'outil invalide" +else + die "Vous devez spécifier l'outil à utiliser" fi