Rechercher : dans
Par :

[Shell Unix] Shell avec awk et sed

Dernière réponse le 13 avr 2007 à 09:12:03 Trezeg, le 11 avr 2007 à 17:40:12 
 Signaler ce message aux modérateurs

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 ?

#!/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
Configuration: Sun OS 5.9

Meilleures réponses pour « [Shell Unix] Shell avec awk et sed » dans :
Sed - Supprimer une ou plusieurs lignes d'un fichier VoirSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Sed - Introduction à SED - Part II VoirSED - The Stream EDitor - Part II Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF) VoirConversion format de fichier DOS UNIX / UNIX DOS Préambule Ce qu'il faut savoir Conversion DOS vers UNIX Conversion UNIX vers DOS Préambule Il existe déjà des utilitaires (dos2unix et unix2dos) qui s'acquittent très bien ce...
Télécharger CygWin VoirCygwin est un environnement UNIX pour Windows composé: d'un shell Unix d'une librairie dynamique (DLL) chargée de fournir une couche d'émulation Unix pour le système Windows d'un ensemble de librairies, sources et exécutables adaptés à Cygwin...
Systèmes UNIX - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système...
Commandes UNIX VoirTableau des principales commandes UNIX Commande Unix Description Options ls liste le contenu d'un répertoire -a Affiche tous les fichiers, y compris les fichiers cachés ...

1

jipicy, le 11 avr 2007 à 22:57:55
  • +1

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
done
J'espère ne pas m'être trompée dans l'interprétation... Attend quand même l'avis d'autres personnes ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

 Trezeg, le 13 avr 2007 à 09:12:03

Merci jipicy

Répondre à Trezeg