Je sais que l'option -k pour le tri Unix nous permet de trier une colonne spécifique et toutes les suivantes . Par exemple, étant donné le fichier d'entrée:
2 3
2 2
1 2
2 1
1 1
En utilisant sort -n -k 1
, je reçois une sortie triée par la 1ère colonne puis par la 2ème:
1 1
1 2
2 1
2 2
2 3
Cependant, je veux garder l'ordre de la 2e colonne, comme ceci:
1 2
1 1
2 3
2 2
2 1
Est-ce possible avec la sort
commande?
join
est que l'entrée soit triée sur les champs sur lesquels vous vous joignez . Donc, bien sûr, cette sortie est triée sur le premier champ et vous pouvez la rejoindre.-k 1,1
(la " , 1 " partie) ne fonctionne pas mieux pour moi. Ce qui fonctionne est-s -k 1
, avec-n
si vous en avez besoin.Pour ne trier que sur la première colonne, vous devriez faire:
De Unix et Linux système Manuel d' administration
la source
-s
option, comme l'a souligné Cascabel.-s
indique "Cette option conserve l'ordre des enregistrements d'origine des enregistrements qui ont une clé égale."Aucune des réponses fournies ne fonctionne généralement pour moi.
Les deux
sort -s -k 2 file1
etsort -n -k1,1
faire un tri supplémentaire avec ce fichier:Je devais juste faire cette chose exacte et fini par utiliser une boucle shell. Cette solution risque de ne pas fonctionner correctement sur un fichier très volumineux, car le fichier entier doit être lu pour chaque valeur unique de la colonne triée.
Ici, le fichier est trié sur la colonne 2 uniquement.
la source
sort -s -k2,2 file1