diff --git a/uawk b/uawk index c586464..973718e 100755 --- a/uawk +++ b/uawk @@ -12,9 +12,7 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS awk || -exit 1 +source "$(dirname "$0")/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 @@ -31,7 +29,7 @@ else Clang=1 fi -if [ "$scriptname" == "awkcsv" ]; then +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 } @@ -42,7 +40,7 @@ $__AWKCSV_HELP" "${prefix}awkcsv" "$@" -elif [ "$scriptname" == "awkfsv2csv" ]; then +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 } @@ -53,7 +51,7 @@ $__AWKFSV2CSV_HELP" "${prefix}awkfsv2csv" "$@" -elif [ "$scriptname" == "mergecsv" ]; then +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 } @@ -64,7 +62,7 @@ $__MERGECSV_HELP" "${prefix}mergecsv" "$@" -elif [ "$scriptname" == "sortcsv" ]; then +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 } diff --git a/ulib/awk b/ulib/awk index a649925..8571949 100644 --- a/ulib/awk +++ b/ulib/awk @@ -764,12 +764,14 @@ function awkcsv() { LANG=C lawkcsv "$@"; } __AWKFSV2CSV_HELP="\ Transformer un flux fsv (colonnes à largeurs fixes) en csv +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 - + 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 - +-r, --no-trim + Ne pas trimmer les valeurs à droite. Flux en sortie: -n, --no-headers @@ -777,9 +779,10 @@ Flux en sortie: function lawkfsv2csv() { local -a args headersizes - local skip_lines=0 show_headers=1 + local skip_lines=0 trim_values=1 show_headers=1 if parse_opts \ -s:,--skip-lines: skip_lines= \ + -r,--no-trim trim_values= \ -n,--no-headers show_headers= \ --show-headers show_headers=1 \ @ args -- "$@"; then @@ -812,7 +815,7 @@ function lawkfsv2csv() { shift awkrun -f \ - skip_lines:int="$skip_lines" show_headers:int="$show_headers" \ + skip_lines:int="$skip_lines" trim_values:int="$trim_values" show_headers:int="$show_headers" \ headers[@] starts[@] sizes[@] \ "$__AWKCSV_FUNCTIONS"' BEGIN { @@ -824,8 +827,10 @@ NR <= skip_lines { next } { line = $0 $0 = "" - for (i=1; i <= headers_count; i++) { - $i = substr(line, starts[i], sizes[i]) + for (i = 1; i <= headers_count; i++) { + value = substr(line, starts[i], sizes[i]) + if (trim_values) sub(/ *$/, "", value) + $i = value } formatcsv() print