2010-11-22 5 views
5

J'ai 2 colonnes, séparées par une virgule. Comment puis-je échanger ces colonnes avec Emacs?Échange de 2 colonnes avec Emacs

Je donne les résultats suivants:

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

et je veux comme ceci:

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

Répondre

11

Utilisez M-x query-replace-regexp puis:

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

comme remplacer regexp et

\2,\1 

pour le remplacement.


Dans Emacs, vous devez échapper à des parenthèses de regroupement avec \. Donc, au-dessus regexp serait généralement écrit comme

(.+),(.+) 

ce qui signifie que vous voulez que tout avant la virgule dans le premier groupe et tout après une virgule dans le deuxième groupe.

\2,\1 

signifie: écrire deuxième groupe, puis virgule, puis premier groupe.

+0

+1 pour regexp - I love emacs expression régulière. Ce qui les berce vraiment, c'est que vous pouvez également faire correspondre les sauts de ligne avec eux. – Knubo

3

similaires à la réponse donnée par @darioo, tapez ce qui suit dans la partie supérieure de votre tampon:

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

Ensuite, placez le curseur à la fin de cette ligne et appuyez sur Ctrl-x, ctrl-e .

Vous aurez une recherche-remplacement interactif pour laquelle vous appuyez sur la barre d'espace pour faire la modification, et appuyez sur Ctrl-G pour quitter. Si vous appuyez sur ! (point d'exclamation), la recherche cessera d'être interactive et aura lieu sur tout le texte correspondant.

Si vous souhaitez annuler les modifications, appuyez sur M-x (généralement ESC suivi de x) et tapez undo et appuyez sur entrée.

3

Utilisez une macro!

  • Aller à la première ligne du tampon
  • Démarrer l'enregistrement d'une macro (F3)
  • Aller au début de la ligne (^ a)
  • Rechercher des virgules (^ s,)
  • Transposer (Mt)
  • du curseur vers le bas d'une ligne
  • macro Arrêter l'enregistrement (F4)

Sélectionnez le reste des lignes et:

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

MISE À JOUR: Cela ne fonctionne pas correctement si vous avez plusieurs mots dans une colonne. Vous cherchez une solution plus générale ...

4

Alors que vous pouvez appliquer des techniques données par d'autres personnes, vous pouvez également utiliser les tables org-mode. Une fois que vous avez converti les données en table de mode org, il est très facile d'échanger les colonnes par de simples frappes. Vous pouvez avoir M-x org-mode, sélectionnez la région, puis M-x org-table-convert-region, puis M- dans la colonne la plus à droite. Je ne suis pas sûr, comment exporter les données au format CSV, mais cela devrait être très facile pour vous avec replace-regexp. Cela peut être utile: http://www.gnu.org/software/emacs/manual/html_node/org/Tables.html#Tables