J'ai un fichier comme celui-ci (qui est délimité par des espaces):
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067
et je veux utiliser la commande sort
pour trier le fichier en fonction de la 4ème colonne. Je l'ai cherché partout sur Internet et j'ai trouvé différentes solutions qui fonctionnent avec la religieuse !! Je trouve même une question similaire dans stackoverflow dont la réponse ne m'a pas fonctionné! Ce sont donc les commandes que j'utilise et qui ne fonctionnent pas!
sort -n -k 4,1 out1.txt
sort -n -k 4 out1.txt
sort -n -k4 out1.txt
sort -nk4 out1.txt
sort +4 out1.txt
donc après avoir exécuté toutes ces commandes, j'obtiens cette sortie (qui est identique à mon entrée):
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067
Je veux obtenir une sortie comme celle-ci:
AX-19 Chr1_419087 1 41908741 T C 0 15 0.067
AX-20 Chr1_419087 1 41908740 T C 0 13 0.067
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
sort -nk4 file
-n for numerical sort
-k for providing key
ou ajoutez -r option
pour le tri inversé
sort -nrk4 file
sort
ne trie pas le fichier sur place. Il produit une copie triée à la place.
Vous avez besoin de sort -n -k 4 out.txt > sorted-out.txt
.
Édition: Pour obtenir l'ordre que vous voulez, vous devez trier le fichier avec les nombres lu à l'envers. Cela le fait:
cut -d' ' -f4 out.txt | rev | paste - out.txt | sort -k1 -n | cut -f2- > sorted-out.txt
CA devrait etre
sort -k 4n out1.txt
Je viens de tester cela avec le type GNU (--debug activé):
$ tac input | /bin/sort --debug -k 4n
/bin/sort: using simple byte comparison
/bin/sort: key 1 is numeric and spans multiple fields
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
________
___________________________________________
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
________
___________________________________________
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067
________
___________________________________________
Il est utile de mentionner que si les mots de chaque ligne de fichier sont séparés par un délimiteur, à l'exception de «espace», nous pouvons spécifier un délimiteur à l'aide de l'option «-t»:
sort -n -t',' -k4 file -o outfile
Nous pouvons obtenir une sortie triée dans n’importe quel fichier de sortie spécifié (en utilisant l’option «-o») au lieu d’afficher la sortie sur une sortie standard.