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 :

Bash suppression entre borne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    iut informatique
    Inscrit en
    Novembre 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : iut informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 34
    Par défaut Bash suppression entre borne
    Bonjour,
    je cherche actuellement un script bash qui me permettrais de supprimer plusieurs lignes (ligne entière) qui sont entre deux borne. Prenons par exemple le fichier.txt ci dessous:
    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
    texte3.txt 8c132aaec5bf35632b26ff6af32672de /mnt/d/travailIUT/projet/dossier1/texte3.txt
     attention
     mou
     fefp
     ezfz
    texte2.txt f17d0e5c28cf78a72f1187140738b7af /mnt/d/travailIUT/projet/dossier1/texte2.txt
     bash
     systeme
    texte2.txt jiujfe5c28cf78a72f11456f4fe8b7af /mnt/d/travailIUT/projet/dossier1/texte2.txt
     avion
     manger
     vomir
    texte4.txt 8c132aaec5bf42jtjtyjyj6af32672de /mnt/d/travailIUT/projet/dossier1/texte3.txt
     atefgfdgd
     ateg
     atehtdh
     atehg
     atekyu
    texte2.txt f17d0e5c28cf78a72f1187140738b7af /mnt/d/travailIUT/projet/texte2.txt
     fzefze
     fezfezf
     zkejzo
    Je veux donc supprimer texte2.txt f17d0e5c28cf78a72f1187140738b7af /mnt/d/travailIUT/projet/dossier1/texte2.txt ainsi que son contenu mais je ne veux pas supprimer texte2.txt jiujfe5c28cf78a72f11456f4fe8b7af /mnt/d/travailIUT/projet/dossier1/texte2.txt ni son contenu. En gros c'est une sorte de suppresion de fichier recent et de son contenu pour le remplacer par le nouveau. Le probleme etant que je ne veux pas supprimer autre chose que l'ancien fichier.txt et son contenu.

    Pour tous ce qui est variable j'ai pu les recuperer avec des cut. J'ai donc deja des variable pour l'empreinte/le nom/l'adresse. J'ai vu que l'on pouvais faire cet suppresion grace au sed -i mais je n'ai pas reussi a faire quoi que ce soit de plus.
    PS: Le fichier texte sera toujours tu meme type. C'est a dire qu'il est du type :
    nomfichier.txt empreinteMD5 chemind'acces
    mot1
    mot2
    mot3
    mot4
    etc
    nomfichier2.txt empreinteMD5 chemind'acces
    mot5
    mot6
    mot7
    etc


    merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par cimestro Voir le message
    Bonjour,
    je cherche actuellement un script bash qui me permettrais de supprimer plusieurs lignes (ligne entière) qui sont entre deux borne.
    Pas très clair: quelles sont ces bornes?
    Comment sont-elles définies?

    Je veux donc supprimer texte2.txt f17d0e5c28cf78a72f1187140738b7af /mnt/d/travailIUT/projet/dossier1/texte2.txt
    Pas très clair: tu veux supprimer cette ligne-ci du fichier "fichier.txt"?
    c'est-à-dire qu'après le passage du script, le fichier "fichier.txt" ne contienne plus cette ligne?
    mais contienne toutes les autres lignes?

    ainsi que son contenu
    Pas très clair: "son contenu"? le contenu de qui?
    Tu veux supprimer le contenu du fichier dont le nom est le 3ème champ de la ligne?
    c'est-à-dire supprimer le contenu du fichier "/mnt/d/travailIUT/projet/dossier1/texte2.txt", c'est-à-dire en faire un fichier existant mais vide?
    Ou bien tu veux supprimer le fichier "/mnt/d/travailIUT/projet/dossier1/texte2.txt", c'est-à-dire en faire un fichier inexistant?

    mais je ne veux pas supprimer texte2.txt jiujfe5c28cf78a72f11456f4fe8b7af /mnt/d/travailIUT/projet/dossier1/texte2.txt ni son contenu.
    Pas très clair: pourquoi ne veux-tu pas supprimer cette ligne?
    Parce que "jiujfe5c28cf78a72f11456f4fe8b7af" commence par 6 lettres, alors que "f17d0e5c28cf78a72f1187140738b7af" ne commence que par une lettre?
    Il faudrait nous donner un peu plus précisément les critères qui guident tes choix.

    En gros c'est une sorte de suppresion de fichier recent et de son contenu pour le remplacer par le nouveau. Le probleme etant que je ne veux pas supprimer autre chose que l'ancien fichier.txt et son contenu.
    Pas très clair: d'où vient la notion de récent?
    C'est quoi le nouveau dont tu parles? Où est-il? D'où vient-il? Où va-t-il?

    Comme dirait N_BaH, pourrais-tu nous montrer le résultat que tu souhaites obtenir?

    Je ne sais pas si les autres contributeurs ont réussi à comprendre ton intention, mais, pour moi

  3. #3
    Membre actif
    Homme Profil pro
    iut informatique
    Inscrit en
    Novembre 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : iut informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 34
    Par défaut
    De base j'ai un BDD qui se fais sur un fichier txt. Cette bdd se fais de la façon suivante:

    Pour chaque fichier.txt dans un dossier et les sous dossiers:
    je recup et j'ecrit sur une ligne : son nom / son empreinte MD5 / son chemin d'acces
    je recup chaque ligne (une ligne = un mot ) de ce fichier et je l'ai ecrit en sautant a la ligne entre chaque mot. De plus j'y indique son nombre d'occurence et les numero de ligne ou ils apparaient.

    Le probleme etant que je dois également faire attention a ne pas ecrire deux fois le fichier. J'ai deja reussi a traiter si le fichier a le meme nom ainsi que la meme adresse md5 alors je ne rajoute pas le fichier dans la bdd.
    Par contre si le fichier porte le meme nom, la meme adresse, mais un md5 different alors je dois supprimer l'ancien fichier ( son nom / son empreinte MD5 / son chemin d'acces) et également son contenu qui peut donc etre plusieurs ligne ( mot / occurence /numeroligne ) contrairement a la ligne portant le nom/md5/adresse qui n'est donc que une fois pour chaque fichier.
    Je sais juste deux chose. Je dois donc supprimer le nomdufichier.txt qui a repondu au test ( meme nom meme adresse mais md5 different ) jusqu'a l'autre fichier.txt. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fichier1.txt
     mot 1 1
     mota 2 2 3
     avion 1 4
    fichier2.txt
    marque 2 1 2
    pour 1 3
    Mon but dans cet exemple: admettons que je change fichier1.txt en supprimant tous son contenu et en mettant: attention a la ligne 1 et bateau a la ligne 2. Alors en relançant le script j'aurais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fichier1.txt
     attention 1 1
     bateau 1 1
    fichier2.txt
    marque 2 1 2
    pour 1 3
    J'ai deja tous le script qui fait la bdd. Je veux donc juste un sed/awk/grep ou autre qui supprime ce que je veux ( expliquer au dessus ) et que je puisse mettre avant l'ecriture dans la bdd sachant que j'ai deja en code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       for i in find -name "*"".txt"
             name=$(basename $i) #recupération du nom fichier
             empreinte=$(md5sum $i) #recuperation de l'empreinte fichier
             echo $name $empreinte >> $cheminbash"/bdd.txt" #on mets name et empreinte dans la bdd.txt
    j'ai encore beaucoup de chose mais je n'ai pas accès a tous. J'ai le deja le if. Je voudrais donc que vous m'aidez pour le sed/awk/grep qui prends comme borne "*"".txt" de la ligne information fichier et qui s'arrete a "*"".txt" de la ligne information fichier ( je dis ça parce que il est possible que un mot dans le fichier soit qqlchose.txt. Voila j'espere avoir été assez clair. Meme si j'en doute. N'hesiter pas a me poser toute vos question. Merci d'avance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    ne te serait-il pas possible de travailler en amont : avant d'enregistrer les données d'un fichier, vérifier dans le fichier log si la dernière "instance" concerne le fichier de données qui va être traité ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre actif
    Homme Profil pro
    iut informatique
    Inscrit en
    Novembre 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : iut informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 34
    Par défaut
    non ça n'est pas possible :/

  6. #6
    Membre actif
    Homme Profil pro
    iut informatique
    Inscrit en
    Novembre 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : iut informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 34
    Par défaut
    si ça peut vous aidez. Je cherche a faire la partie "si le fichier a été modifié, on lance l'indexation c++". c'est la prog c++ qui va me faire les comptage de ligne et des mots

    "--index" parcoure l'ensemble des répertoires/sous-répertoires à partir de celui donné par l'utilisateur. Pour chaque fichier, on crée son empreinte md5 et on la compare avec celle existante dans la base. Si le fichier n'a pas été modifié, il est déjà indexé, on ne lance pas le programme C++. Si le fichier a été modifié, on lance l'indexation (C++), on efface dans la base (si elles existent) les informations de ce fichier, on calcule son nouveau md5. Au retour du programme C++, on stocke les informations dans la base (nom, chemin, md5, liste des mots, des occurrences et des lignes)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    tu dois faire un effort de présentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Pour chaque fichier, 
            on crée son empreinte md5 et 
            on la compare avec celle existante dans la base. 
                    Si le fichier n'a pas été modifié, il est déjà indexé, on ne lance pas le programme C++. 
                    Si le fichier a été modifié, 
                            on lance l'indexation (C++), 
                            on efface dans la base (si elles existent) les informations de ce fichier, 
                            on calcule son nouveau md5. 
                            Au retour du programme C++, 
                            on stocke les informations dans la base (nom, chemin, md5, liste des mots, des occurrences et des lignes)
    tu y verras aussi plus clair.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [RegEx] suppression entre 2 recherches
    Par proser dans le forum Langage
    Réponses: 3
    Dernier message: 28/04/2008, 12h05
  2. Suppression entrées sous formulaire
    Par HE dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/02/2008, 15h01
  3. ALEA.ENTRE.BORNE() Comment faire ?
    Par Jimy6000 dans le forum Excel
    Réponses: 28
    Dernier message: 23/01/2008, 07h09
  4. [FORMULE]Recherche valeur approximative entre bornes
    Par philname dans le forum Excel
    Réponses: 2
    Dernier message: 25/05/2007, 15h49
  5. Ajout et Suppression entre deux listBox
    Par sacofan dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/01/2007, 17h02

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