Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 01-02-2013 10:46:50

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Supprimer des lignes par rapport à un autre fichier

Salut tout le monde.

J'ai un fichier csv de 12000 lignes (liste.csv).
De ce fichier j'ai extrait des lignes avec un assemblage plus ou moins savant de grep dans un autre csv (extait.csv), environs 2000 lignes.

Maintenant je ne veux pas qu'il y ai de doublon, et je veux donc supprimer les lignes, présentes dans le fichier extrait.csv, du fichier liste.csv.

Si je prends un exemple:
liste.csv:

ecran 1
ordi 2
serveur 4
kvm 8
switch 4
switch 4



extrait.csv:

ecran 1
kvm 8



Je souhaite en utilisant le fichier extrait.csv obtenir.

ordi 2
serveur 4
switch 4
switch 4




J'ai essayé plusieurs tentatives avec patch et diff, mais j'ai pas obtenu encore ce que je souhaite.
Auriez vous une idée, ou un outil qui me permettrait de faire ça?
Merci d'avance pour vos idées.
Kao

Hors ligne

#2 01-02-2013 16:24:45

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : Supprimer des lignes par rapport à un autre fichier

J'ai trouvé un compromis pas trop mal, je gruge avec uniq et sort. L'ordre des lignes m'importe peu.

cat liste.csv extrait.csv |sort | uniq -u



Avec cat je ré-assemble les deux fichiers (liste.csv et extrait.csv), du coup je suis sûr que l'ensemble des lignes en provenance de "extrait.csv" sont maintenant en double.
Maintenant, je classe avec sort et j'affiche tout les éléments qui ne sont pas double avec uniq -u

-u, --unique
    N'afficher que les lignes uniques.
-d, --repeated
    N'afficher que les lignes dupliquées.



Je suis obligé de passer d'abord par sort parce que comme le dit la doc:

uniq réclame que le fichier d'entrée soit trié car il ne compare que les lignes consécutives.

Hors ligne

Pied de page des forums