Supposons que vous avez un fichier qui contient des adresses IP, une adresse unique à chaque ligne:
10.0.10.1
10.0.10.1
10.0.10.3
10.0.10.2
10.0.10.1
Vous avez besoin d'un script shell qui compte pour chaque adresse IP, combien de fois qu'il apparaît dans le fichier. Pour l'entrée précédente vous avez besoin de la sortie suivante:
10.0.10.1 3
10.0.10.2 1
10.0.10.3 1
Une façon de le faire est:
cat ip_addresses |uniq |while read ip
do
echo -n $ip" "
grep -c $ip ip_addresses
done
Cependant il est très loin d'être efficace.
Comment voulez-vous résoudre ce problème de manière plus efficace à l'aide de bash?
(Une chose à ajouter: je sais qu'il peut être résolu à partir de perl ou awk, je suis intéressé par une meilleure solution dans bash, pas dans ces langues.)
INFOS SUPPLÉMENTAIRES:
Supposons que le fichier source est de 5 go et la machine qui exécute l'algorithme a 4 go. Si le tri n'est pas une solution efficace, ni de la lecture du fichier plusieurs fois.
J'ai aimé la table de hachage comme solution - n'importe qui peut apporter des améliorations à cette solution?
PLUS D'INFOS #2:
Certaines personnes ont demandé pourquoi je prendrais la peine de le faire en bash quand il est plus facile par exemple en perl. La raison en est que, sur la machine que j'avais à faire cette perl n'était pas disponible pour moi. C'était une coutume construit machine linux sans la plupart des outils que j'y suis habitué. Et je pense que c'était un problème intéressant.
Donc, s'il vous plaît, ne les blâme pas la question, juste l'ignorer si vous ne l'aimez pas. :-)