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

Linux Discussion :

renommage des lignes d'un fichier avec condition


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut renommage des lignes d'un fichier avec condition
    bonjour messieurs j'ai un petit souci sur la réalisation d'un script,

    voila j'ai 2 fichiers :
    toto.txt>> du type (correspond à un find d'une arbo)
    /opt
    /opt/rep1
    /opt/rep2/
    /opt/rep2/repopt2
    ...
    /etc
    /etc/rep1/titi
    /etc/toto
    ...
    /bin
    etc .....


    et un autre
    titi.txt >> du type (un referentiel)
    /opt
    /opt/rep2
    /etc
    /etc/toto

    je voudrais sortir les lignes du 1er fichier en .ok en fonction du 2eme fichier de la maniére suivante
    dans l'exemple > tous les repertoires sous /opt seront renommé en /opt.ok/"sousrep" et ainsi de suite sauf /opt/rep2 ( car il est aussi défini dans mon 2eme fichier) et la se sera /opt/rep2.ok/"sousrep"
    de même /etc.ok/"sousrep" sauf /etc/toto qui sera /etc/toto.ok

    si je n'avais pas de sous repertoires définis dans mon 2eme fichier l'affaire serait conclue, mais je n'arrive pas à gérer cette histoire de condition "vérifier qu'un sous repertoire n'est pas défini si c'est le cas ne pas renommer la premiére occurence mais passer au renommage de la 2eme ou 3eme en fonction des définitions du 2eme fichier.

    si vous avez une idée pour me faire avancer merci d'avance, je travaille sur une solution avec awk et les tableaux multidimensionnels.

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par dofre114
    si vous avez une idée pour me faire avancer merci d'avance, je travaille sur une solution avec awk et les tableaux multidimensionnels.
    Avec "awk", l'utilisation de tableau associatif semble répondre au problème


    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
     
    awk -v referentiel=referentiel.txt  '
    function FctChrgt()
    {
    	print "* Chargement du tableau des index"
    	while (getline Tbuffer < referentiel > 0) {
    		Ctr++
    		TdirNbre=split(Tbuffer,Tdir0,/\//)
    		Index=""
    		for (i=2 ; i <= TdirNbre ; i++) {
    			Index=Index"/"Tdir0[i]
    			if (Tdir[Index] != 1) {
    				Tdir[Index]=1
    				print "* ["Index"]"
    			}
    		}
    	}
    	print "* FIN Chargement du tableau des index"
    }
    BEGIN {
    	FS="/"
    	OFS="/"
    	FctChrgt()
    	print
    	print "+ Traitement"
    }
    {
    	lu=$0
    	#
    	#-- On compare de l arborescence la plus longue a la plus courte
    	#
    	for (DecrIndice=NF ; DecrIndice > 1 ; DecrIndice--) {
    		DirCompare=""
    		for (i=2 ; i <= DecrIndice ; i++) {
    			DirCompare=DirCompare"/"$i
    		}
    		# l arborescence formattée est-elle connue comme index ? 
    		if (Tdir[DirCompare] == 1) {
    			i--
    			$i=$i".ok"
    			printf("%25s -> %-25s\n",lu,$0)
    			next
    		}
    	}
    	printf("%25s -> %-25s\n",lu,$0)
    } ' liste.txt

    Résultat du traitement :
    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
     
    * Chargement du tableau des index
    * [/opt]
    * [/opt/rep2]
    * [/opt/rep2/repopt3]
    * [/etc]
    * [/etc/toto]
    * FIN Chargement du tableau des index
     
    + Traitement
                         /opt -> /opt.ok                  
                    /opt/rep1 -> /opt.ok/rep1             
                    /opt/rep2 -> /opt/rep2.ok             
            /opt/rep2/repopt2 -> /opt/rep2.ok/repopt2     
            /opt/rep2/repopt3 -> /opt/rep2/repopt3.ok     
    /opt/rep4/repopt4/repopt44 -> /opt.ok/rep4/repopt4/repopt44
                         /etc -> /etc.ok                  
               /etc/rep1/titi -> /etc.ok/rep1/titi        
                    /etc/toto -> /etc/toto.ok             
                         /bin -> /bin

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci blaireauone, pourtant tu n'en ai pas un

Discussions similaires

  1. [WD15] Enregistrement des lignes d'une table avec condition
    Par bestmoroco dans le forum WinDev
    Réponses: 7
    Dernier message: 11/12/2012, 09h20
  2. grouper des lignes en un seul avec des conditions
    Par afrozeen dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/05/2009, 12h07
  3. Supprimer des lignes d'un fichier lu avec StringBuffer
    Par blackhock dans le forum Général Java
    Réponses: 3
    Dernier message: 15/04/2009, 17h21
  4. Changer la couleur des lignes d'un dbGrid avec condition
    Par kroma23 dans le forum Bases de données
    Réponses: 7
    Dernier message: 02/10/2008, 09h21
  5. Réponses: 14
    Dernier message: 16/07/2008, 12h47

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