Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 30/11/2012, à 16:49

Supprimer doublon avec awk

Voila j'ai un fichier ( WhoIsOnline) ou sur chaque ligne apparait un mot.
j'aimerais supprimer les doublons or ce que j'ai fais ne marche pas ..
voila ce que j'ai

cat WhoIsOnline |
awk '{
for (i=1;i<=$NF;i++)
{
        nb=0
        for(j=1;j<i;j++) { # je verifie si tous les champs d'avant sont differents
                if ($i == $j) nb++
        }
        if(nb==0) printf $i
}
}'

apres divers test j'ai l'impression que mon i reste a 1 ...

Dernière modification par Bat_Tuc (Le 30/11/2012, à 16:49)


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#2 Le 30/11/2012, à 17:02

Re : Supprimer doublon avec awk

Bonjour,

Voila j'ai un fichier ( WhoIsOnline) ou sur chaque ligne apparait un mot.

Peux-tu préciser ? S'il n'y a qu'un mot par ligne, inutile de passer en revue les champs de la ligne.
Si c'est bien le cas, et si l'ordre importe peu :

sort -bu WhoIsOnline >WhoIsOnline.new

En ligne

#3 Le 30/11/2012, à 17:04

Re : Supprimer doublon avec awk

j'ai un seul mot par ligne. L'ordre importe peu.
ta réponse repond donc a mon besoin, mais pourquoi mon awk ne marchait pas  ? sad


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#4 Le 30/11/2012, à 17:15

Re : Supprimer doublon avec awk

mais pourquoi mon awk ne marchait pas  ?

Il ne faut déjà pas de $NF sur cette ligne, qui doit être :

for (i=1;i<=NF;i++)

Remarque : Le awk serait plus propre ainsi :

awk '{………}' WhoIsOnline

Dernière modification par pingouinux (Le 30/11/2012, à 17:18)

En ligne

#5 Le 30/11/2012, à 17:16

Re : Supprimer doublon avec awk

awk '!_[$0]++' fichier

(si une ligne n'a pas déjà été trouvée on l'affiche)

Comme pingouinux, j'avoue que je comprends mal ton raisonnement du premier message.


GUL les mardis à Bordeaux : Giroll
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

Hors ligne

#6 Le 30/11/2012, à 17:18

Re : Supprimer doublon avec awk

Enfaite j'ai vraiment du mal avec awk. Je pensais qu'il faisait du traitement sur tout le fichier.
Alors que si j'ai bien compris il fait le traitement ligne par ligne c'est ca ? il va applique mon code a chaque ligne ? Ca explique donc pourquoi i vaut toujours 1 j'ai que un seul champ par ligne ..


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#7 Le 30/11/2012, à 17:27

Re : Supprimer doublon avec awk

@nesthib #5 : Joli, mais il y a de quoi dérouter le néophyte…

En ligne

#8 Le 30/11/2012, à 17:47

Re : Supprimer doublon avec awk

@pingouinux : c'est un grand classique awk qui utilise une syntaxe idiomatique wink
Pour l'explication, on créé un tableau « _ » qui enregistre le nombre de fois où une ligne est trouvée « _[$0]++ », par défaut si aucune commande n'est lancée awk affiche la ligne actuelle SI le retour d'une action (ici, afficher le contenu de « _[$0] ») est vrai (ici, « _[$0]++ » n'est vrai que si une ligne a déjà été vue, donc « !_[$0]++ » n'est vrai que si une ligne n'a jamais été vue).

@Bat_Tuc : awk fait du traitement par bloc et par champ, par défaut un bloc est une ligne et un champ est un mot. Donc par défaut, oui, awk applique ton code à chaque ligne.


GUL les mardis à Bordeaux : Giroll
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

Hors ligne

#9 Le 30/11/2012, à 17:50

Re : Supprimer doublon avec awk

Merci nesthib pour l'explication, mais ma remarque était juste anecdotique.

En ligne

#10 Le 30/11/2012, à 21:48

Re : Supprimer doublon avec awk

Dans ta commande awk, $NF veut dire:  le contenu du dernier champs de la ligne courante.

Hors ligne

Haut de page ↑