Permettez-moi de clarifier:
Supposons que j'ai quelques mots clés avec la fréquence de leur utilisation:
12 Hi
7 Hash
7 C++
9 Superuser
17 Stackoverflow
9 LaTeX
42 Life
9 Ubuntu
Ce que je veux, c'est trier ces données en fonction de la fréquence en ordre décroissant et s'il y a des valeurs égales, il devrait utiliser la deuxième colonne en ordre croissant.
sort -n -r foo.txt
Est-ce que la première partie mais ensuite la deuxième colonne sont également reversed
:
42 Life
17 Stackoverflow
12 Hi
9 Ubuntu
9 Superuser
9 LaTeX
7 Hash
7 C++
Comment puis-je obtenir les résultats suivants?
42 Life
17 Stackoverflow
12 Hi
9 LaTeX
9 Superuser
9 Ubuntu
7 C++
7 Hash
Je pense que je dois utiliser l' -k
argument mais je ne sais pas comment!
Je veux savoir comment cela peut être fait en utilisant uniquement la sort
commande de bash
. Cependant, s'il n'est pas possible d'y parvenir uniquement par sort
, d'autres commandes devraient être compatibles avec le shell Bourne.
text-processing
sort
Pouya
la source
la source
-g
option de tri GNU (numérique général) au lieu de-n
pour les comparaisons numériques est plus sûre: elle fonctionne correctement pour les virgules flottantes et les entiers.Réponses:
Spécifiez les clés de tri séparément avec les critères:
Cela spécifie que la première clé est triée numériquement dans l'ordre inverse tandis que la seconde est triée selon l' ordre de tri par défaut .
Citant du tri POSIX :
Cela produirait:
la source