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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user