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 :

Suppression de la 2ème ligne commencant par le même motif que celle du dessus


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut Suppression de la 2ème ligne commencant par le même motif que celle du dessus
    Pas sur que ça soit clair, mais je souhaite supprimer la 2ème ligne commençant par le même motif que celle du dessus.

    Par exemple, j'ai un fichier :

    qzdfd zefzf
    toto fait du velo
    qsdfq fsdfdsq qfsqdf
    sdfsqfd
    toto va ala plage
    toto rentre chez lui
    kjhsdjsqd

    Je voudrai supprimer uniquement la ligne "toto rentre chez lui" car commençant par "toto" qui en suit une autre commençant aussi par "toto".
    Il y aurait moyen avec sed ou une autre commande ?
    Merci pour votre aide !

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par nespresso Voir le message
    Je voudrai supprimer uniquement la ligne "toto rentre chez lui" car commençant par "toto" qui en suit une autre commençant aussi par "toto".
    Il y aurait moyen avec sed ou une autre commande ?
    Il faut coder une "machine à état"...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    etat=""
    tant que ligne; alors
        si ligne ne commence pas pareil que etat alors écrire ligne (sous-entendu que ce script prendra ton fichier originel pour en créer une copie expurgée)
        etat=ligne
    fin tant que
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    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 408
    Par défaut
    Déjà, une question sur le besoin: Quid du cas suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    titi 1
    toto 1
    toto 3
    toto 2
    tata

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut
    Merci pour le retour rapide.
    Je vais regarder ça.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Déjà, une question sur le besoin: Quid du cas suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    titi 1
    toto 1
    toto 3
    toto 2
    tata
    Bonne remarque, mais je n'ai pas ce cas, au plus 2 occurences.

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '((FNR>1)&&($1==m)){next;} {m=$1;print;}'

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Il faut coder une "machine à état"...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    etat=""
    tant que ligne; alors
        si ligne ne commence pas pareil que etat alors écrire ligne (sous-entendu que ce script prendra ton fichier originel pour en créer une copie expurgée)
        etat=ligne
    fin tant que
    Merci, j'ai pu faire un petit script, qui fait le travail

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 714
    Par défaut
    c'est sympa le partage, quand même.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '((FNR>1)&&($1==m)){next;} {m=$1;print;}'
    Merci, ça marche en grande partie.
    Je n'ai pas précisé, mais il ne faut pas que cela impacte d'autres lignes qui se suivraient en commencant par le même mot.

    exemple :

    qzdfd zefzf
    toto fait du velo
    tata fsdfdsq qfsqdf
    tata ffrml zelzmlf
    sdfsqfd
    toto va ala plage
    toto rentre chez lui
    kjhsdjsqd

    toto et tata seraient concernés, alors que je souhaite uniquement toto.
    Je ne sais pas si on peut l'adapter en lui donnant une expression régulière ?
    Mais je garde en tous cas, ça servira c'est sur !

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    c'est sympa le partage, quand même.
    Je l'ai fais comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while read ligne;
    do
            if [[ ${ligne} != toto* ]] ; then
            echo $ligne >> 04122023.txt
            fi
     
            if [[ ${ligne} == toto* ]] && [[ ${etat} != toto* ]] ; then
            echo $ligne >> 04122023.txt
            fi
     
            etat=$ligne
    done < 04122023-a.txt

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nespresso Voir le message
    toto et tata seraient concernés, alors que je souhaite uniquement toto.
    Ce n'est pas ce que tu as dit au départ. Au départ c'était juste "ligne pas pareil que ligne précédente". Après bon ok on rajoute un critère particulier sur "toto" c'est pas compliqué mais c'est bien de donner le concept complet dès le départ.

    Citation Envoyé par nespresso Voir le message
    Je ne sais pas si on peut l'adapter en lui donnant une expression régulière ?
    Oui, awk connait les regex.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/^toto/{N;s@\ntoto.*@@}'

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 714
    Par défaut
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while read mot reste
    do
        if test $mot = toto # je ne mets pas de guillemets parce qu'il n'y a qu'un seul mot
                            # et je ne mets pas d'accolades, parce qu'il n'y a rien d'accolé à la variable !
        then
            ((${s:-0}?(s=0):(s=1),$s)) && continue
        fi
        echo "$mot $reste"
    done </tmp/nespresso.txt

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/^toto/{N;s@\ntoto.*@@}'
    Parfait ! Merci

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while read mot reste
    do
        if test $mot = toto # je ne mets pas de guillemets parce qu'il n'y a qu'un seul mot
                            # et je ne mets pas d'accolades, parce qu'il n'y a rien d'accolé à la variable !
        then
            ((${s:-0}?(s=0):(s=1),$s)) && continue
        fi
        echo "$mot $reste"
    done </tmp/nespresso.txt
    Merci, je testerais, même si j'avoue ne pas tout saisir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer les lignes commencant par
    Par 8e8eClo dans le forum VBA Word
    Réponses: 10
    Dernier message: 13/10/2011, 23h43
  2. premiere ligne commencant par ID;
    Par ahmet57 dans le forum Excel
    Réponses: 1
    Dernier message: 08/01/2009, 22h16
  3. recuperation des lignes commencant par -
    Par vince2005 dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2007, 15h55
  4. Réponses: 6
    Dernier message: 06/01/2007, 18h30
  5. [langage] Trouvé les lignes commencant par [
    Par Nervix dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2004, 11h04

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