2010-11-04 3 views
5

J'essaye de trier le fichier texte en utilisant la commande UNIX sort (GNU 5.97 ou 7.4) selon le code ASCII. Les lignes du fichier ont une seule colonne, qui est utilisée comme clé dans le tri.Unix trier la clé de la combinaison de caractères alphanumériques et ':', '/'

chr1:110170896:NM_004037:0:1:0/1 
chr1:110170897:NM_004037:0:1:0/1 
chr11:10325325:chr11:0:1:0/1 
chr11::0325325:chr11:0:1:0/1 

Le code ascii de : est 58, et 1 est 49. Cependant, quand je trier le fichier avec sort -k 1,1 temp.txt, la sortie est comme ça,

chr11::0325325:chr11:0:1:0/1 
chr1:110170896:NM_004037:0:1:0/1 
chr1:110170897:NM_004037:0:1:0/1 
chr11:10325325:chr11:0:1:0/1 

A partir du résultat, je ne idée comment trier détermine l'ordre entre 1 et :. S'il y avait un ordre fixe, les première et quatrième lignes devraient être placées ensemble.

Idéalement, j'espère trier la clé du caractère de gauche au caractère de droite en fonction du code ASCII.

Répondre

3

que diriez-vous

sort -t : -k 1 filename 

utilisant le: comme séparateur de champ

3

De la page de manuel pour le tri GNU:

* AVERTISSEMENT * Le paramètre régional spécifié par l'environnement affecte ordre de tri. Définissez LC_ALL = C pour obtenir l'ordre de tri traditionnel qui utilise des valeurs d'octet natives.

L'utilisation LC_ALL=C sort text (où text est un fichier où je copié vos données d'échantillon) sur ma machine donne l'ordre de tri que vous voulez.

toujours pas d'explication pourquoi chr11 ne trie pas ensemble dans l'exemple d'origine si ...

+0

merci, ça marche – Xatan

2

sort est locale sensible. Il sera affecté par vos paramètres régionaux.

Vous devez essayer de définir la langue sur C pour revenir à l'ordre ASCII.

Dites-le ou exécuté comme LANG=C sort -k 1,1 temp.txt définir votre variable d'environnement

Si vous avez besoin d'une explication de la mauvaise commande, il serait préférable de donner à votre environnement local/LANG pour creuser la raison.

+0

merci, ça marche – Xatan

Questions connexes