[Shell Unix] Shell avec awk et sed
Résolu
Trezeg
Messages postés
81
Statut
Membre
-
Trezeg Messages postés 81 Statut Membre -
Trezeg Messages postés 81 Statut Membre -
Bonjour,
Je dois travailler sur un shell existant qui a pour but de comparer le nombre de lignes contenues dans un fichier avec ce qui a été réellement chargé dans une base. Il est lancé à la fin de l'exécution d'une multitude de shells.
Mon objectif est de pouvoir le lancer à la fin de chaque shell. Or le (gros) problème est que je n'ai pas tout saisi au niveau de son contenu... Malheureusement il est truffé de awk et de sed et le guide du ksh ne parvient pas à me faire passer la pilule :-/
Sauriez-vous traduire son contenu ?
Trez
Je dois travailler sur un shell existant qui a pour but de comparer le nombre de lignes contenues dans un fichier avec ce qui a été réellement chargé dans une base. Il est lancé à la fin de l'exécution d'une multitude de shells.
Mon objectif est de pouvoir le lancer à la fin de chaque shell. Or le (gros) problème est que je n'ai pas tout saisi au niveau de son contenu... Malheureusement il est truffé de awk et de sed et le guide du ksh ne parvient pas à me faire passer la pilule :-/
Sauriez-vous traduire son contenu ?
#!/bin/ksh
ctrlMsysout=$CONTROLM/sysout
ls $ctrlMsysout | sed '/^CMD./ d' | \
while read line;do
batch=`echo $line | sed 's/\.LOG.*//'`
inputfile=`grep bcp $currv/batchMngt/batches/$batch | nawk '{print $4}'`
let occur=0
while [ "$inputfile" != "" ];do
let occur=occur+1
origname=`echo $inputfile | nawk '{print $1}'`
file=`eval echo $origname`
if test -f $file;then
. ./certify.ksh $file $ctrlMsysout/$line $occur $batch
else
echo "the file $file doesn't exist"
fi
inputfile=`echo $inputfile | awk '{
for(i=2;i<=NF;i++)
{
print $i
}
}'`
done
done
Merci pour votre aide.
Trez
A voir également:
- [Shell Unix] Shell avec awk et sed
- Classic shell - Télécharger - Personnalisation
- Secure shell - Télécharger - Divers Web & Internet
- Shell infrastructure host c'est quoi - Guide
- Shell startup windows 10 - Guide
- Shell do while ✓ - Forum Shell
2 réponses
Salut,
#!/bin/ksh
# Initialisation variable
ctrlMsysout=$CONTROLM/sysout
# On liste le répertoire et on élimine tout les fichiers commençant par "CMD"
#+ et on envoie la sortie dans un "tube" et on continue sur la ligne suivante
ls $ctrlMsysout | sed '/^CMD./ d' | \
# Tant qu'on lit une ligne ; faire
while read line;do
# Initialisation de la variable "batch" en supprimant tout à partir
#+ de ".LOG.jusqu'à_la_fin"
batch=`echo $line | sed 's/\.LOG.*//'`
# Initialisation de la variable "inputfile" en filtrant les lignes contenant
#+ "bcp" avec "grep" dans les fichiers récupérés par la commande précédente
#++ avec récupération du 4 ème champ
inputfile=`grep bcp $currv/batchMngt/batches/$batch | nawk '{print $4}'`
# Initialisation de la variable de type entier "$occur" à 0
let occur=0
# tant que la variable "$inputfile" n'est pas vide; faire
while [ "$inputfile" != "" ];do
# Incrémentation de la variable $occur de 1
let occur=occur+1
# Initialisation de la variable "$origname" avec le 1 er champ de la variable $inputfile
origname=`echo $inputfile | nawk '{print $1}'`
# la variable "$file" prend la valeur de l'évaluation de la variable $origname
file=`eval echo $origname`
# On teste si $file est un fichier, si oui alors
if test -f $file;then
# On lance le script "certify.ksh" avec les paramètres résultant des variables...
#+ Apparemment on le source (.) afin de faire prendre en compte par l'environnement
#++ les paramètres positionnels (les variables) # A vérifier tout de même
. ./certify.ksh $file $ctrlMsysout/$line $occur $batch
# Sinon on affiche le message suivant
else
echo "the file $file doesn't exist"
fi
# On re-initialise la variable "$inputfile" en l'incrémentant tant qu'elle n'est pas
#+ égale (inférieure ou égale) au nombre de champs (NF)
inputfile=`echo $inputfile | awk '{
for(i=2;i<=NF;i++)
{
print $i
}
}'`
done
doneJ'espère ne pas m'être trompée dans l'interprétation... Attend quand même l'avis d'autres personnes ;-))