Newer
Older
api-wos / SOAP / WosDecode.sh
#!/bin/bash


# Initialisation des variables pour les options
programme=$(basename $0)
substitut=$(echo $programme | sed 's/./ /g')
version='1.2.1'
modif='17/02/2022'

function usage
{
echo "Usage : $programme -f (fichier[,fichier]*|-) [ -p programme ] [ -s sortie ] "
echo "        $programme -h "
}

function aide
{
cat << EOT

Usage
=====
    $programme -f (fichier[,fichier]*|-) [ -p programme ] [ -s sortie ] 
    $programme -h

Options
=======
    -f  indique le nom du ou des fichiers à traiter. Cette option est 
        répétitive. Vous pouvez également utiliser une liste de fichiers 
        séparés par des virgules (mais sans espace) ou mettre un tiret 
        si les données sont envoyées sur l’entrée standard
    -h  affiche cette aide
    -p  indique où trouver le programme “decode_wos” s’il n’est pas dans 
        un des répertoires donnés par la variable \$PATH
    -s  indique le nom du fichier de sortie. Sinon, les données sont 
        envoyées sur la sortie standard

EOT

exit 0
}

function lire
{
local tmp=()
local stdin=0
local item
local deb
local fin

for item in $*
do
    while [[ -n $item ]]
    do
        deb=${item%%,*}
        fin=${item#*,}
        tmp+=($deb)
        if [[ $deb = $fin ]]
        then
            item=""
        else
            item=$fin
        fi
    done
done

for fichier in ${tmp[@]} 
do
    if [[ $fichier = '-' ]]
    then
        if [[ $stdin -eq 0 ]]
        then
            cat
        fi
        stdin=1
    else
        cat $fichier
    fi
done 
}

declare -a fichiers

while getopts f:hp:s: i
    do
    case $i in
        f) fichiers+=($OPTARG);;
        h) aide;;
        p) prog=$OPTARG;;
        s) sortie=$OPTARG;;
        \?) echo " " >&2
            usage    >&2
            echo " " >&2
            exit 1;;
    esac
    done

if [[ ${#fichiers[@]} -eq 0 ]]
then
    echo "Erreur : option “-f” absente " >&2
    echo " " >&2
    usage    >&2
    echo " " >&2
    exit 2
fi

decode=${prog:-decode_wos}

if [[ -z $sortie ]]
then
    sortie='/dev/fd/1'
fi

lire ${fichiers[@]} | 
    $decode | 
    egrep '<REC ' | 
    (echo '<records>'; 
     cat; 
     echo '</records>') | 
    xmllint -format - > $sortie 



exit 0