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 :

Comment traiter les ruptures premières ou les ruptures dernières d'un fichier ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut Comment traiter les ruptures premières ou les ruptures dernières d'un fichier ?
    Bonjour,

    je n'arrive pas à conclure un traitement sur un fichier csv volumineux.
    Pour simplifier, ce fichier se compose ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    date_aaaammjj_01; clé_01;etc_01;...;...;...;
    date_aaaammjj_02; clé_01;etc_02;...;...;...;
    date_aaaammjj_03; clé_01;etc_03;...;...;...;
    date_aaaammjj_04; clé_01;etc_04;...;...;...;
    date_aaaammjj_05; clé_01;etc_05;...;...;...;
    Et cela avec de nombreuses autres clés.

    Le fichier est trié sur :
    -1- la clé (seconde colonne)
    -2- la date première colonne)

    La question est simple :
    1/ Comment ne traiter (par exemple Lister) que la première ligne de chaque clé ?
    et son alternative
    2/ Comment ne traiter (par exemple Lister) que la dernière ligne de chaque clé ?

    Bonne année 2023 à tous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2 0 2 3 
    --------   =   17**2
    2+0+2+3

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    1/ sort -u ....,
    2/ tac | sort -u....
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

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

    Je suis sûr que tu as déjà vu la technique ici, avec awk.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk -F';' '!vu[$2]++' fichier.csv
    date_aaaammjj_01; clé_01;etc_01;...;...;...;

  4. #4
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    Bonjour,

    J'ai du mal à déchiffrer ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk -F';' '!vu[$2]++' fichier.csv
    -F';' : signale que le séparateur de champs du fichier csv est le point-virgule.
    ! : représente (il me semble) un NOT.
    $2 : représente (il me semble) la colonne où se trouvent les clés, c.à.d. la seconde colonne du fichier csv.

    vu : je ne sais pas ; un vecteur ?
    ++ : je ne sais pas ; une incrémentation ?

    Je suis dans le brouillard ; d'où deux autres questions :

    Q1/ Où trouver une bonne doc à lire sur awk de préférence en français ?

    Q2/ Peut-on faire sans awk ? (N_BaH propose la commande unique, mais les lignes sont différentes !)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    "vu" est un tableau associatif (c'est à dire un tableau qui a des indices texte au lieu d'indices nombre).
    !vu[$2] signifie donc, littéralement, "tant qu'on l'a pas vu, on l'affiche". Et l'incrémentation change la valeur pour la clé. Donc elle n'est plus zéro, donc on l'a déjà vu. On n'affichera plus une ligne avec cette clé.


    R1 : "gawk manual" est pas mal.

    R2 : Si tu tries selon un champ avec sort, l'élément unique qu'il garde est le premier. N'est-ce pas ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    c'est ça.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Comment traiter les espaces dans le nom du fichier
    Par maban dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/08/2007, 20h25
  2. [GD] Comment traiter les yeux rouges ?
    Par Roromix dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 04/06/2007, 12h38
  3. Comment traiter les GError **error ?
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 02/04/2007, 09h30
  4. [VB.NET] Page Edition, comment traiter les <br?
    Par zigoto dans le forum ASP.NET
    Réponses: 12
    Dernier message: 08/02/2005, 17h05

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