2010-11-22 10 views
5

Tengo 2 columnas, separadas por comas. ¿Cómo puedo intercambiar esas columnas con Emacs?Intercambio de 2 columnas con Emacs

Tengo el siguiente:

column 1,column2 
    x1,x2 
    y1,y2 
    f1,f2 

y lo quiero de esta manera:

column2,column 1 
x2,x1 
y2,y1 
f2,f1 

Respuesta

11

Uso M-x query-replace-regexp y luego:

\(.+\),\(.+\) 

como reemplazar expresiones regulares y

\2,\1 

para el reemplazo.


En Emacs, tiene que escapar paréntesis de agrupación con \. Por lo tanto, por encima de expresión regular se escriben normalmente como

(.+),(.+) 

que significa que usted quiere todo antes de la coma en el primer grupo y todo después de la coma en el segundo grupo.

\2,\1 

significa: escribir segundo grupo, a continuación, coma, entonces primer grupo.

+0

+1 para regexp - Me encanta la expresión regular de emacs. Lo que realmente les gusta es que también puedes unir líneas de alimentación con ellos. – Knubo

3

Similar a la respuesta dada por @darioo, escriba lo siguiente en la parte superior de la memoria intermedia:

(query-replace-regexp "\\(.*?\\),\\(.*\\)" "\\2,\\1") 

Luego, se coloca el cursor al final de esta línea y pulse Ctrl-X, Ctrl-E .

Tendrá una función de buscar y reemplazar interactiva para la cual presione la barra espaciadora para realizar el cambio y presione ctrl-g para salir. Si presiona ! (signo de exclamación), la búsqueda dejará de ser interactiva y tendrá lugar en todos los textos coincidentes.

Si desea invertir los cambios, presione M-x (generalmente ESC seguido de x) y escriba undo y presione Intro.

3

utiliza una macro!

  • Ir a la primera línea de la memoria intermedia
  • comenzar a grabar un macro (F3)
  • Mover al principio de la línea (^ a)
  • búsqueda para coma (^ s,)
  • transposición (Mt)
  • Mover el cursor una línea hacia abajo
  • Detener la grabación macro (F4)

Seleccione el resto de las líneas y:

M-x apply-macro-to-region-lines 

ACTUALIZACIÓN: Esto no funcionará correctamente si tiene varias palabras en una columna. Buscando una solución más general ...

4

Si bien puede aplicar técnicas proporcionadas por otras personas, también puede usar las tablas de modo orgánico. Una vez que convierte los datos en la tabla de modo orgánico, es muy fácil intercambiar las columnas con simples pulsaciones de teclas. Puede tener M-x org-mode, seleccionar la región, luego hacer M-x org-table-convert-region, y luego M- en la columna de la derecha. No estoy seguro de cómo exportar los datos como CSV, pero eso debería ser muy fácil para usted con replace-regexp. Esto puede ser útil: http://www.gnu.org/software/emacs/manual/html_node/org/Tables.html#Tables

Cuestiones relacionadas