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 :

Sélection multiligne en Shell


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
    161
    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 : 161
    Par défaut Sélection multiligne en Shell
    Bonjour,
    À partir d'un fichier .csv trié sur un des champs du fichier (par exemple "champ_1"), comment par une commande ou un script Shell, obtenir en sortie, le même fichier contenant uniquement les lignes où "champ-1" n'est pas unique ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    01;a;b;c
    02;1;2;3
    02;A;B;C
    04;m;n;o
    07;l;i;a
    07;L;I;A
    07;L;i;a
    09;e;;n;d
    produit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    02;1;2;3
    02;A;B;C
    07;l;i;a
    07;L;I;A
    07;L;i;a

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ join -t';' -j1 <(cut -d ';' -f1 entree.txt | uniq -d) <(sort -t ';' -k1,1 entree.txt)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ join -t';' -j1 -o 2.1 2.2 2.3 2.4 <(uniq -d -w2 entree.txt) <(sort -t ';' -k1,1 entree.txt)
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    161
    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 : 161
    Par défaut
    Merci N_BaH
    Je testerai demain matin.

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

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

    N'aurais-tu pas déjà posé la question ?

    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
    $ awk -F';' -vc=1 '(tab[$c]!=""){if (p[$c]==0) {print tab[$c];p[$c]=1;}; print;next;} {tab[$c]=$0;}' fichier.txt 
    02;1;2;3
    02;A;B;C
    07;l;i;a
    07;L;I;A
    07;L;i;a
    $ awk -F';' -vc=2 '(tab[$c]!=""){if (p[$c]==0) {print tab[$c];p[$c]=1;}; print;next;} {tab[$c]=$0;}' fichier.txt 
    07;L;I;A
    07;L;i;a
    $ awk -F';' -vc=3 '(tab[$c]!=""){if (p[$c]==0) {print tab[$c];p[$c]=1;}; print;next;} {tab[$c]=$0;}' fichier.txt 
    07;l;i;a
    07;L;i;a
    $ awk -F';' -vc=4 '(tab[$c]!=""){if (p[$c]==0) {print tab[$c];p[$c]=1;}; print;next;} {tab[$c]=$0;}' fichier.txt 
    07;l;i;a
    07;L;i;a

  5. #5
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    161
    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 : 161
    Par défaut
    À Flodelarab : je ne crois pas. (ou je ne m'en souviens plus)

    Le premier code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ join -t';' -j1 <(cut -d ';' -f1 entree.txt | uniq -d) <(sort -t ';' -k1,1 entree.txt)
    marche avec l'exemple proposé, mais ne marche pas sur mes fichiers en réel; j'ai dû faire une erreur; je vais chercher.

    J'aurais quatre autres questions :

    Q1/ Si je voulais mettre le résultat du "join" (première commande) dans un fichier, je ferais comment ?

    Q2/ Décomposer la première commande "join" avec des fichiers intermédiaires temporaires en l'écrivant sur trois lignes; ça donnerait quoi ?

    Q3/ Pourrait_on s'en sortir avec la commande "sed" ?
    Je demande ça car j''ai vu que "sed" possède deux buffers (1. active_pattern_ space et 2.auxiliary_hold_ space)
    D’où une la dernière question plus générale :

    Q4/ La commande "sed" peut-elle gérer les ruptures premières ou dernières sur un champ ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    1/ tu rediriges la sortie standard de la commande vers un fichier.
    2/ je ne fais pas ça. Quel gain espères-tu ?
    3,4/ quand on travaille sur des colonnes/champs (typiquement des .csv) awk est beaucoup mieux adapté.
    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. Réponses: 17
    Dernier message: 17/10/2017, 14h44
  2. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  3. StringGrid, multiligne et word wrap
    Par Dajon dans le forum C++Builder
    Réponses: 7
    Dernier message: 17/09/2003, 17h15
  4. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 14h56
  5. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 09h39

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