web-dev-qa-db-fra.com

comment utiliser la commande Linux Trier pour trier le fichier texte en fonction de la 4ème colonne, ordre numérique?

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
22
mahmood
sort -nk4 file

-n for numerical sort
-k for providing key

ou ajoutez -r option pour le tri inversé

sort -nrk4 file
37
jaypal singh

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

8
Joni

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
                    ________
___________________________________________
1
sehe

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.

source: http://www.thegeekstuff.com/2013/04/sort-files/

0
Malgi