#!/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