2010-11-04 5 views
5

Estoy tratando de ordenar el archivo de texto utilizando el comando UNIX sort (GNU 5.97 o 7.4) según el código ASCII. Las líneas en el archivo tienen una sola columna, que se usa como la clave en orden.Unix ordenar la clave de la combinación de caracteres alfanuméricos y ':', '/'

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 

el código ASCII de : es 58, y 1 es 49. Sin embargo, cuando puedo ordenar el archivo con sort -k 1,1 temp.txt, la salida es así,

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 del resultado, no tengo idea de cómo el orden determina el orden entre 1 y :. Si hubiera un orden fijo, la primera y la cuarta líneas deberían colocarse juntas.

Idealmente, espero clasificar la clave del carácter izquierdo al carácter correcto de acuerdo con el código ASCII.

Respuesta

3

¿qué tal

sort -t : -k 1 filename 

mediante el: como un delimitador de campo

3

Desde la página del manual de GNU para ordenar:

* ADVERTENCIA * el entorno local especificado por el entorno afecta Orden de clasificación. Establezca LC_ALL = C para obtener el orden de clasificación tradicional que usa valores de bytes nativos.

Usando LC_ALL=C sort text (donde text es un archivo en el que he copiado los datos de la muestra) en mi máquina da el orden que desee.

Todavía no hay explicación de por qué no ordena chr11 juntos en el ejemplo original, aunque ...

+0

gracias, funciona – Xatan

2

sort es sensible al entorno local. Se verá afectado por su configuración regional.

Debe intentar establecer el idioma en C para volver al orden ASCII.

Say ejecutarlo como LANG=C sort -k 1,1 temp.txt o configurar su variable de entorno

Si necesita una explicación de la mis-orden, que sería mejor dar su entorno locale/LANG para desenterrar la razón.

+0

gracias, funciona – Xatan

Cuestiones relacionadas