J'ai un fichier texte d'environ 20 millions de lignes. Chaque ligne a 25 caractères. J'estime qu'il y a probablement environ 200k-300k lignes uniques. Ce que je veux savoir, c'est exactement combien il y a de lignes uniques, et combien d'occurrences de chaque ligne il y a (je m'attends à ce que le résultat soit power-law-esque).Meilleure façon de déterminer l'unicité et la répétition dans un fichier texte
je pouvais faire ceci:
sort bigfile|uniq -c |sort -nr > uniqcounts
wc -l uniqcounts
mais qui est terriblement inefficace mémoire et sage temps.
Quelle est votre meilleure solution en ligne de commande pour résoudre ce problème?
J'échangerais $ lines {$ a} <=> $ lignes {$ b} à $ lignes {$ b} <=> $ li nes {$ a} pour obtenir les lignes les plus fréquentes en premier. –
Essentiellement, cet algorithme charge le fichier entier en mémoire. Si votre O (n)> = RAM, alors vous aurez de sérieux problèmes lorsque vous commencerez à échanger. Il a aussi O (m log (m)) pour le tri final où m est le nombre de lignes uniques. L'affiche a déclaré que le rapport entre les lignes uniques et non uniques est de 1000: 1. – slacy
@Osama: Merci. J'ai mis à jour le code. –