Awk dédoublonner un print
Résolu
Deep
-
deeper -
deeper -
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
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
3 réponses
-
tu veux purger TOTO des doublons ? donc
awk 'BEGIN{FS=OFS=";"} !t[$1, $2, $3]++ {print $1, $2, $3 }' TOTO | tee TITI > TUTU -
hello
awk 'BEGIN{FS=OFS=";"} {print $1, $2, $3 > "TITI" ; print $1, $2, $3 > "TUTU" }' TOTOouawk 'BEGIN{FS=OFS=";"} {print $1, $2, $3 }' TOTO | tee TITI > TUTU -
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.