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 POSIX Discussion :

Supprimer les lignes d'un fichier sur base d'un autre fichier [KSH]


Sujet :

Shell et commandes POSIX

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 66
    Points : 51
    Points
    51
    Par défaut Supprimer les lignes d'un fichier sur base d'un autre fichier
    Bonjour à tous,

    J'essaie de faire un truc tout bête (en tout moins que moi apparemment) en ksh en parcourant les lignes d'un fichier et de supprimer chaque occurence du fichier lu présente dans un autre fichier, au final je veux que l'autre fichier soit purgé des données du fichier lu.

    Mettons que j'ai un fichier A.csv qui contient :
    111
    222
    333
    444
    555

    et que dans liste_a_suppr.txt j'ai :
    333
    555

    Je voudrais au final me retrouver avec un fichier A.csv qui contient :
    111
    222
    444

    Mais je n'y arrive pas avec le code suivant.
    Le fichier A.csv reste inchangé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/ksh
     
    while read -r line
    do
     
    		sed '/$line/d' ./A.csv > tmp
    		mv tmp A.csv 
     
    		let "cpt_appli = $cpt_appli + 1"
    		echo $cpt_appli
     
    done < ./liste_a_suppr.txt
    Est-ce que vous pourriez m'aider svp ?

    Merci d'avance.


    Bon j'ai trouvé ....
    en remplacer par des doubles quotes.
    sed "/$line/d" ./A.csv > tmp

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonsoir.

    A noter que tu pourrais plus simplement faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort fichier1 fichier2 | uniq -u
    Bien sûr si le fait d'ordonner le fichier ne te pose pas de problèmes.

    Démonstration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [idriss@hp-dv6:~]$ cat A.csv 
    111
    222
    333
    444
    555
    [idriss@hp-dv6:~]$ cat B.csv 
    333
    555
    [idriss@hp-dv6:~]$ sort A.csv B.csv | uniq -u
    111
    222
    444
    Il suffira de rediriger la sortie vers un nouveau fichier temporaire puis écraser ton csv avec le fichier temporaire.

    Cordialement,
    Idriss

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bonjour,

    Si ton OS possède un grep qui supporte l'option -f, tu peux aussi faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -v -f list-a-sup.csv A.csv
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat A.csv
    111
    222
    333
    444
    555
    $ cat list-a-sup.csv
    333
    555
    $ grep -v -f list-a-sup.csv A.csv
    111
    222
    444
    Cordialement.
    Cordialement.

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

Discussions similaires

  1. Supprimer les lignes d'un fichier
    Par Wisefool dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/02/2011, 09h18
  2. Supprimer les lignes vides d'un fichier
    Par Invité dans le forum VBScript
    Réponses: 2
    Dernier message: 26/09/2008, 16h21
  3. Réponses: 1
    Dernier message: 09/07/2007, 14h45
  4. Supprimer les lignes d'un fichier texte
    Par radhwene dans le forum Langage
    Réponses: 1
    Dernier message: 20/06/2007, 11h01
  5. Réponses: 2
    Dernier message: 04/05/2006, 13h10

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