J'ai un fichier texte qui contient plusieurs mots par ligne.
Comment puis-je trouver les 12 lignes les plus fréquentes dans le fichier et les afficher?
Je ne suis pas très bon avec les commandes de script.
Si je pouvais obtenir la commande et une explication afin que je puisse comprendre comment l'utiliser et développer mes connaissances sur les commandes, ce serait génial!
Réponses:
Vous pouvez facilement le faire avec des commandes intégrées.
sort
. Nous en avons besoin pour la prochaine étape.uniq -c
. Il comptera l'occurrence unique de chaque ligne. Si les lignes similaires ne sont pas adjacentes, cela n'aurait pas fonctionné sans tri avant.sort
, qui trie maintenant dans l'ordre inversé (r
) et basé sur l'n
interprétation numérique ( ) de launiq
sortie. Nous avons besoin de l'option numérique car sinon, l'espace devant les chiffres conduirait à des résultats erronés (voir l'aide de GNUsort
pour plus).head
.La commande serait alors:
La sortie ici contient le nombre réel d'occurrences.
Pour obtenir uniquement la liste brute des lignes, vous pouvez diriger la sortie vers
sed
:Exemple:
Sortie de la première commande, mais en sélectionnant seulement 2 parmi
head
:Sortie de la deuxième commande:
la source
uniq
.sort -rn
tris dans l'ordre inverse en utilisant comme champ de tri le numéro à côté de chaque ligne produite paruniq -c
? Je pensais que quelque chose commek1
ou quelque chose comme ça serait utilisér
inverse etn
trie numériquement le nombre produit paruniq
. Que voulez-vous dire exactementk1
?man
et j'ai compris qu'une syntaxe utilisant-k
quelque chose devait être utilisée pour choisir le champ à trierSi votre distribution a un logtop
Si votre fichier est en constante augmentation, comme un fichier journal, essayez:
la source