Awk dédoublonner un print

Résolu/Fermé
Deep - 4 sept. 2012 à 12:09
 deeper - 5 sept. 2012 à 09:47
Bonjour à tous,

J'ai un fichier (TOTO) du type :
OFFRE;CIBLE;TYPE;NOM

12345;111;1;DUPOND
12345;111;1;DURAND
12345;888;1;MARTIN
12345;888;2;MAURICE
23456;444;1;ANDRE

Et je souhaiterais à la fois ne conserver que les 3 premiers champs et dédupliquer ce fichier en même temps

12345;111;1
12345;888;1
12345;888;2
23456;444;1

Mon script est alors :
awk 'print $1, $2, $3, $4' TOTO > TITI
sort -u TITI > TUTU

Seulement le fichier contient environ 1 million de lignes, et l'écriture du fichier TITI est très longue. Alors que si je pouvais à la fois ne conserver que les 3 premiers champs et le dédupliquer, ce serait parfait.

Merci pour votre aide.
Deep


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
4 sept. 2012 à 14:24
tu veux purger TOTO des doublons ? donc
awk 'BEGIN{FS=OFS=";"} !t[$1, $2, $3]++ {print $1, $2, $3 }' TOTO | tee TITI > TUTU
2
C'est ça que je voulais.
C'est rapide et simple.

Merci beaucoup à tous ! Génial !
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 4/09/2012 à 12:37
hello
awk 'BEGIN{FS=OFS=";"} {print $1, $2, $3 > "TITI" ; print $1, $2, $3 > "TUTU" }' TOTO
ou
awk 'BEGIN{FS=OFS=";"} {print $1, $2, $3 }' TOTO | tee TITI > TUTU
1
Bonjour,

Merci beaucoup.
Malheureusement, le délai d'exécution est encore long étant donné que l'on écrit 2 fichiers.
L'idéal serait de conserver dans un array les valeurs unqiues $1 $2 $3 et ne les écrire qu'à la fin.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 sept. 2012 à 13:35
et 2 tâches en parallèle
awk 'BEGIN{FS=OFS=";"} {print $1, $2, $3 }' TOTO > TITI  & awk 'BEGIN{FS=OFS=";"} {print $1, $2, $3 }' TOTO > TUTU &
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
4 sept. 2012 à 13:40
Salut,

Et un "cp" à la fin ?

awk 'BEGIN{FS=OFS=";"} {print $1, $2, $3 }' TOTO > TITI && cp TITI TUTU
0
Je m'exprime mal, désolé.
Je disais 2 fichiers car on va :
1) créer un fichier contenant les 3 premières colonnes du fichier d'entrée
2) utiliser le fichier créé avec les 3 colonnes pour le dédoublonner
Je me demandais alors si on ne pouvait pas utiliser un array pour stocker les valeurs de $1 $2 $3, comparer chaque ligne du fichier d'entrée au contenu de ce tableau, et si $1 $2 $3 n'existent pas alors on les stocke dans la variable.
Enfin, on vide la variable dans un fichier
Du coup, on n'aurait l'écriture que d'un fichier.
0