#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.newHors 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 ? ![]()
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 '{………}' WhoIsOnlineDernière modification par pingouinux (Le 30/11/2012, à 17:18)
Hors 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 tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4
En 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…
Hors 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 ![]()
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 tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4
En ligne
#9 Le 30/11/2012, à 17:50
Re : Supprimer doublon avec awk
Merci nesthib pour l'explication, mais ma remarque était juste anecdotique.
Hors 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
Pages : 1
- Accueil
- » Forum
- » Terminal, scripts et ligne de commande
- » Supprimer doublon avec awk
