Pages : 1
#1 Le 30/11/2012, à 15:49
- Bat_Tuc
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, à 15: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, à 16:02
- pingouinux
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
Hors ligne
#3 Le 30/11/2012, à 16:04
- Bat_Tuc
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 ?
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, à 16:15
- pingouinux
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, à 16:18)
Hors ligne
#5 Le 30/11/2012, à 16:16
- nesthib
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 Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#6 Le 30/11/2012, à 16:18
- Bat_Tuc
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, à 16:27
- pingouinux
Re : Supprimer doublon avec awk
@nesthib #5 : Joli, mais il y a de quoi dérouter le néophyte…
Hors ligne
#8 Le 30/11/2012, à 16:47
- nesthib
Re : Supprimer doublon avec awk
@pingouinux : c'est un grand classique awk qui utilise une syntaxe idiomatique
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 Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#9 Le 30/11/2012, à 16:50
- pingouinux
Re : Supprimer doublon avec awk
Merci nesthib pour l'explication, mais ma remarque était juste anecdotique.
Hors ligne
#10 Le 30/11/2012, à 20:48
- aduxas
Re : Supprimer doublon avec awk
Dans ta commande awk, $NF veut dire: le contenu du dernier champs de la ligne courante.
Hors ligne