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 :

Supprimer des lignes d'un fichier 1 en fonction du contenu du fichier 2


Sujet :

Shell et commandes GNU

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

    Informations forums :
    Inscription : Février 2008
    Messages : 68
    Points : 47
    Points
    47
    Par défaut Supprimer des lignes d'un fichier 1 en fonction du contenu du fichier 2
    Bonjour,

    J'ai un Fichier A dans lequel j'ai la liste de tous mes utilisateurs.
    Dans mon fichier B j'ai une liste d'utilisateur indésirables.

    Comment faire pour suppprimer les utilisateur B de mon fichier A et me retrouver au final avec un joli fichier de référence A tout beau tout propre.

    Merci

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    Salut,

    euh tu as un langage de prédilection pour le coder ton petit outil? :d

    dans tous les cas, tu vas devoir créer un fichier temporaire ne contenant que les désirés et ecraser le fichier d'origine par ce fichier temporaire

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Solution la plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cp A_file A_file.bak && grep -vFf B_file A_file.bak > A_file

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Explication de la commande de Matafan :

    1/ Faire une copie du fichier A, pour sauvegarde
    Si la sauvegarde s'est bien passée (cp ne renvoie pas de code d'erreur, mais un code OK), alors exécuter la suite
    Enfin, la commande qui t'intéresse : grep, qui permet de filtrer les lignes du fichier passé en paramètre après l'option -f sur l'autre fichier. man grep t'en apprendra beaucoup sur cet utilitaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -vFf B_file A_file.bak > A_file

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Merci pour l'explication, c'est vrai que c'était un peu sybillin

    On pourrait penser que le cp est inutile, est qu'on pourrait aussi bien faire un grep du fichier original vers un nouveau fichier, puis écraser l'ancien fichier par le nouveau. Mais le cp est un moyen simple de conserver les droits du fichier original.

  6. #6
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Une autre façon de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    join -t ':' -v 1 file_A file_B > file_A.new
    Mais cela ne fonctionnera que si file_A et file_B sont correctement triés. Si ce n'est pas le cas, c'est un peu plus long:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sort -t ':' -k 1,1 file_A > file_A.sorted
    sort file_B > file_B.sorted
    join -t ':' -v 1 file_A.sorted file_B.sorted > file_A.new
    Explications:
    • Tri de file_A sur le premier champ, champs séparés par ':' (je suppose qu'il est au format de /etc/passwd).
    • Tri de file_B (je suppose que c'est juste une liste de logins, un login par ligne).
    • Jointure des deux fichiers triés sur le premier champ, seules les lignes n'apparaissant pas dans file_B.sorted resteront dans le résultat file_A.new.
    • Il faudrait nettoyer après: rm -f *.sorted puis mv file_A.new file_A

Discussions similaires

  1. problème pour supprimer des lignes d'un fichier
    Par NicoO_O dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 17/01/2008, 07h23
  2. Réponses: 4
    Dernier message: 26/07/2007, 11h35
  3. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h00
  4. Réponses: 3
    Dernier message: 21/07/2006, 13h22
  5. Shell pour supprimer des lignes d'un fichier
    Par nelsa dans le forum Autres langages
    Réponses: 2
    Dernier message: 20/09/2004, 12h26

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