2011-06-23 5 views
5

¿Cómo ordeno líneas semi lexiográficamente en emacs, es decir, lexiográficamente, excepto que 3 se ordena por encima de 11? Por ejemplo, tengo una gran colección de datos, cada entrada de los cuales parece que¿Cómo ordeno líneas semi lexiográficamente en emacs, es decir, lexiográficamente, excepto que 3 se ordena por encima de 11?

[ 5, 3, 21, 1600000 ], 
[ 3, 11, 21, 6400000 ], 
[ 3, 3, 102, 1600000 ], 

etc ...

Mx sort-lines clasifica esto como

[ 3, 11, 21, 6400000 ], 
[ 3, 3, 102, 1600000 ], 
[ 5, 3, 21, 1600000 ], 

pero yo realmente como este ordenado como

[ 3, 3, 102, 1600000 ], 
[ 3, 11, 21, 6400000 ], 
[ 5, 3, 21, 1600000 ], 

Gracias!

+1

que no es estrictamente lexicográficamente para un editor. Un editor maneja el texto, y el tipo que Emacs hizo por defecto _es_ tipo correcto de cadenas lexicográficas – sehe

+0

Gracias sehe, estás en lo cierto. Editaré la pregunta. – mike

+0

¿Has probado sort-numeric-fields? – borrible

Respuesta

2

no uso emacs, pero en vim lo haría:

%!sort -k2n -k3n 

(posiblemente usando las otras columnas de clave, así, no puedo decirle a formar la muestra)

I No estoy comenzando la guerra del editor aquí ... Estoy bastante seguro de que emacs también te permite filtrar a través de un comando de shell, ¡así que esto ayudará!

3

sehe gives a good solution. Aquí está en Emacs:

C-u M-| sort -k2n -k3n 

Run que con su región seleccionada y será reemplazado con el ouput sort!

2

con sus datos, la siguiente hará lo que usted desee, aunque es un poco laborioso:

C-u 3 M-x sort-numeric-fields 
C-u 2 M-x sort-numeric-fields 

No sé a ciencia cierta que es un sort-numeric-fieldsstable sort, por lo que no siempre funciona. Y, obviamente, lo anterior solo ordena 2 números "profundos" y deberá agregar C-u 4 M-x sort ... si desea ordenar por el 3er. El argumento de prefijo comienza con 2 porque el primer campo es [, y el recuento comienza con 1.

También puede hacer rodar el suyo llamando al sort-subr con el predicado lexicográfico apropiado. Vea el documentation for sort-subr para más detalles.

Cuestiones relacionadas