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 :

Compter les lignes par groupe


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut Compter les lignes par groupe
    Bonjour,

    J'ai un fichier dont la structure est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    COPY toto1
    ligne1.a
    ligne1.b
    ligne1.c
     
    COPY toto2
    ligne2.a
    ligne2.b
     
    COPY toto3
    ligne3.a
    ligne3.b
    ligne3.c
    ligne3.d
    Et je souhaite récupérer le nombre de lignes pour chaque groupe, c'est-à-dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto1 3
    toto2 2
    toto3 4
    Je ne sais pas s'il est possible de faire ça avec cut, awk et wc (par exemple) ?
    L'un de vous aurait-il une idée pour mettre sur une piste ?

    Merci d'avance,

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Bonjour,
    oui, en awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/^ *$/ {next};/^COPY/ {if(XX){print nom" "XX};nom=$2;XX=0;next};{XX++};END{if(XX){print nom" "XX}}' fichier

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Alors là : et

    J'avoue très mal connaître awk. Tu peux m'expliquer comment fonctionne cette ligne de commande ?

    En tout cas, merci pour ton aide.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Elle est vraiment spécifique à ton exemple:
    /^ *$/ {next} : passe à la ligne suivante si celle-ci est vide ou ne possède que des espaces.
    /^COPY/ {if(XX){print nom" "XX};nom=$2;XX=0;next} : si on est sur une ligne commençant par 'COPY' alors on vérifie que XX soit vrai (donc existe ou différent de 0) et si c'est le cas on affiche la valeur de nom et de XX. quoiqu'il arrive on affecte à nom la valeur du deuxième champs de la ligne en cours, on met à 0 XX et on passe à la ligne suivante.
    {XX++} : on incrémente XX (si on arrive là, c'est que les précédentes étapes pour la ligne en cours ne se sont pas réalisées car les conditions étaient fausses.
    le bloc END est juste là pour traiter la fin de fichier et donc afficher le comptage du dernier bloc de ligne.

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Merci pour ces explications limpides et pour ton aide.

    @+
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/12/2013, 19h07
  2. Afficher les lignes par groupe en excel avec vb.net
    Par malakrouhhi dans le forum VB.NET
    Réponses: 4
    Dernier message: 12/01/2010, 18h47
  3. numéroter les lignes par groupe
    Par Kurdran dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/04/2008, 14h08
  4. [Shell] Regrouper les lignes par groupe de trois
    Par bazouil29 dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 04/01/2008, 21h43

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