IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Shell: gestion de 2 fichiers ligne par ligne


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 75
    Points
    75
    Par défaut Shell: gestion de 2 fichiers ligne par ligne
    Bonjour,

    Cela fait un petit moment que je suis venu mais...retour au shell après un moment de python, et je dois gérer un import d'user dans un addressbook, parcontre je suis en pure galère pour gerer mes 2 fichiers en mode ligne par ligne en même temps (le retour au shell fait mal)

    C'est loin d'être très propre pour le moment, et l'adressbook où je suis est...un foutoir avec au moins 12 formats différents et interdit d'y touché, on instaure le format prévu actuellement NOM Prénom:mail
    Il faut parcontre tenir compte des 5000 autres contactes pouvant être dispatché de type NOM:mail ou Prenom NOM:mail pour gerer les doublons, voir les changements de mail.

    Pour le moment...J'en suis là et ca ne donne pas grand chose de fonctionnel, les 2 fichiers ne se lisent pas ligne par ligne comme il faut et j'ai un gros trou sur le comment faire pour avoir un retour ligne par ligne mit en variable...ou voir a améliorer ma base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    #!/bin/bash -x
     
     
    #### Variables ####
    ADDRESSBOOK=" /addressbook/addressbook"
    LOG=" /addressbook/log/ajout_mail_addressbook.log"
    DATE=`date +"%Y-%m-%d"`
    LISTE_MAIL=" /addressbook/a_verifier.txt"
     
    #### Verification du fichier mailuser.txt #####
    cat /addressbook/a_verifier.txt | while read "LISTE_NEW"
    do
    if [ ! -s $LISTE_MAIL ]
    then
        echo "Merci de renseigner le fichier $LISTE_MAIL"
        echo "ainsi : Nom Prenom:email@provider.com"
        exit 0
    fi
    ### Verification du fichier Générer ###
    > /addressbook/listeusermail
    awk 'NF != 2 { print }' $A_VERIFIER >  /addressbook/listeusermail
     
    if [ -s  /addressbook/listeusermail ]
    then
        echo "le fichier mailuser.txt doit contenir 3 champs : Nom Prenom:email@provider.com"
        echo "Veuillez verifier le contenu du fichier : $LISTE_MAIL"
        exit 0
    fi
     
    cat   /addressbook/addressbook | while read ADDRESSBOOK_READ
    do
    echo-e $ADDRESSBOOK_READ
    ##### Vérification si l utilisateur existe deja ####
    > /addressbook/listeusermail
    #Detail des possibilité de recherche
    NOM=$( echo $LISTE_NEW | sed "s/:/\\ /g" |awk '{print $1}')
    NOM_PRENOM=$( echo $LISTE_NEW | sed "s/:/\\ /g" |awk '{print $1,$2}')
    PRENOM_NOM=$( echo $LISTE_NEW | sed "s/:/\\ /g" |awk '{print $2,$1}')
    #EMAIL=$( echo $LISTE_NEW | sed "s/:/\\ /g" |awk '{print $3}')
    EMAIL=$( echo $LISTE_NEW | sed "s/:/\\ /g" | awk '{print $(NF-0)}')
    #récupération du mail pour replace ancien > nouveau si changement
    ADDRESSBOOK_MAIL=$(echo $ADDRESSBOOK_READ | sed "s/:/\\ /g" | awk '{print $(NF-0)}')
     
    	#si $NOM est trouvé, vérification si prenom_nom puis mail ou vérification nom_prenom puis mail
     
    echo $ADDRESSBOOK_READ | grep -s $NOM
      if [ $? -eq 0 ]
      then # grep de la présence nom + prenom
        echo $ADDRESSBOOK_READ | grep -s $NOM_PRENOM 
          if [ $? -eq 0 ] 
          then  #grep la présence du mailuser
    	echo $ADDRESSBOOK_READ | grep -s $EMAIL
    	if [ $? -ne 0 ]
    	then
    	  echo "L'utilisateur  $NOM_PRENOM à changer d'email"
    	  # modification du mailuser dans l'addressbook
    	    sed "s/$ADDRESSBOOK_READ_MAIL/$EMAIL/g" >> $ADDRESSBOOK
    	fi
          fi
        echo $ADDRESSBOOK_READ | grep -s $PRENOM_NOM
          if [ $? -eq 0 ] 
          then  #grep la présence du mailuser
    	echo $ADDRESSBOOK_READ | grep -s $EMAIL
    	if [ $? -ne 0 ]
    	then
    	  echo "L'utilisateur $PRENOM_NOM à changer d'email"
    	  # modification du mailuser dans l'addressbook
    	    sed "s/$ADDRESSBOOK_READ_MAIL/$EMAIL/g" >> $ADDRESSBOOK
    	fi
          fi
      else	#si l'utilisateur n'a pas que le nom, grep du nom et du mail, si non présent: ajout dans l'addressbook
        	echo grep -s $NOM $ADDRESSBOOK_READ |grep -s $EMAIL
    	if [ $? -eq 0 ]
    	then echo
    	  echo "L'utilisateur  $NOM à changer d'email"
    	  # modification du mailuser dans l'addressbook
    	    sed "s/$ADDRESSBOOK_READ_MAIL/$EMAIL/g" >> $ADDRESSBOOK
    	fi
      fi
     
    echo $ADDRESSBOOK_READ | grep -s $NOM
      if [ $? -ne 0 ]
      then # grep de la présence nom + prenom	
      echo $ADDRESSBOOK_READ | grep -s $PRENOM_NOM
        if [ $? -ne 0 ]; #si n'est pas grep prenom_nom + mail
        then
        echo $ADDRESSBOOK_READ | grep -s $NOM_PRENOM
          if [ $? -ne 0 ]  #si n'est pas grep nom + mail
          then echo "ajout dans l'addressbook de $NOM_PRENOM:$EMAIL "
          cat  /addressbook/listeusermail | while read i
    	do # ajout dans l'addressbook
    	  MAIL=`echo $i | awk '{ print $3 }'`
    	  #var=`echo $i | awk '{ print $1, $2":"$3 }'`
    	  echo $var
    	  #echo $MAIL
    	  echo $var >> $ADDRESSBOOK
    	  echo "L adresse mail de $i a ete ajoutee à l addressbook"
    	  echo -e "$DATE \t\t Ajout de l email $MAIL a l addressbook " >> $LOG
    	done
          fi
        fi
      fi
     
    #fi
    done
    done

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    il y a des jeunes qui viennent ici; 'faut pas laisser ça là, mon p'tit monsieur !
    Y a des endroits pour brûler des trucs comme ça.


    d'abord, les noms de variables en minuscules, ou panachés.
    UUOC.
    on n'initie pas une boucle avant d'avoir testé les pré-requis pour éventuellement terminer le script.

    faut que je continue ?

    pourquoi avoir écris tout ça avant de poser ta question ?

    expose simplement ton algorithme (pourquoi tu dois lire deux fichier en même temps), et où/pourquoi le code ne fonctionne pas (description du comportement, et du comportement attendu, les messages d'erreurs).

    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,

    Si tu connais python, pourquoi ne pas le faire avec lui ?
    Cordialement.

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. Opération sur un fichier et lecture ligne par ligne
    Par teunniq dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 03/06/2014, 17h57
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo