Éliminer les doublons dans un fichier

Résolu/Fermé
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - Modifié par poiuytreza01234567890 le 22/01/2013 à 21:28
 Utilisateur anonyme - 23 janv. 2013 à 21:06
Bonjour,

J'ai un fichier sous cette forme:
A B
C D
C C
B A
D A
Je veux que j'élimine le cas où $1=$2 (exemple: C C) et si je suis dans le cas (A B)/(B A) je veux qu'il élime une et me laisse l'autre. pour avoir un fichier de sortie comme ça:
A B
C D
D A
Comment en fait ça sous bash?

Merci

A voir également:

3 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
23 janv. 2013 à 12:25
hello
$ cat fichier
A B
C D
C C
B A
D A 
$ awk '{split($0, a); asort(a); s=a[1] a[2]; if(!t[s]++ && (a[1] != a[2]))print $0}' fichier
A B
C D
D A 
$
2
mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 7 748
23 janv. 2013 à 10:44
En bash c'est un peu compliqué car tu dois mémoriser toutes les lignes que tu as croisé. Si il n' y a pas de contraintes sur l'ordre dans lequel sorte les lignes c'est déjà plus facile, tu peux boucler sur chaque ligne de sorte à ce que la première lettre précède toujours la seconde dans l'ordre alphabétique), mais je n'ai pas l'impression qu'il y ait d'opérateur -lt ou < pour le texte en bash. Du coup awk est peut être plus adapté pour cette partie.

Ensuite tu rajoutes un | sort | uniq derrière et l'affaire est dans le sac.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
23 janv. 2013 à 10:53
Salut mamie,

mais je n'ai pas l'impression qu'il y ait d'opérateur -lt ou < pour le texte en bash.
Si, depuis bash 4 c'est possibeul ;-))

Extrait du man bash :
Lorsqu'ils  sont  utilisés  avec  [[,  les opérateurs < et > ordonnent d'un point de vue lexicographique en utilisant les paramètres linguistiques régionaux courants.
0
mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 7 748
23 janv. 2013 à 19:18
Ah parfait :-) Ce matin j'avais essayé avec des crochets simples et ça ne marchait pas, c'était donc juste ça :-)
0
Utilisateur anonyme
23 janv. 2013 à 21:06
en effet, avec test et [, il faut protéger les chevrons
test A \< B && echo OK || echo KO
sinon le shell les interprète comme une redirection.
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
23 janv. 2013 à 10:45
Merci
0