Обмен 2 колонками с Emacs - PullRequest
       4

Обмен 2 колонками с Emacs

7 голосов
/ 22 ноября 2010

У меня есть 2 столбца, разделенных запятой.Как я могу поменять эти столбцы с Emacs?

У меня есть следующее:

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

, и я хочу это так:

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

Ответы [ 5 ]

11 голосов
/ 22 ноября 2010

Используйте M-x query-replace-regexp, а затем:

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

в качестве замены regexp и

\2,\1

для замены.


В Emacs вам нужноизбегайте группировки скобок с \.Таким образом, вышеприведенное регулярное выражение обычно записывается как

(.+),(.+)

, что означает, что вам нужно все до запятой в первой группе и все после запятой во второй группе.

\2,\1

означает: напишите второегруппа, затем запятая, затем первая группа.

5 голосов
/ 22 ноября 2010

В то время как вы можете применять методы, данные другими людьми, вы также можете использовать таблицы режима орг.Как только вы преобразуете данные в таблицу режима org, очень легко поменять столбцы простым нажатием клавиши.Вы можете использовать Mx org-mode, выбрать регион, затем выполнить Mx org-table-convert-region, а затем M- в самом правом столбце.Я не уверен, как экспортировать данные как CSV, но это должно быть очень легко для вас с replace-regexp.Это может быть полезно: http://www.gnu.org/software/emacs/manual/html_node/org/Tables.html#Tables

3 голосов
/ 22 ноября 2010

Используйте макрос!

  • Перейти к первой строке буфера
  • Начать запись макроса (F3)
  • Перейти к началу строки (^ a)
  • Поиск запятой (^ s,)
  • Транспонирование (М-т)
  • Переместить курсор вниз на одну строку
  • Остановить запись макроса (F4)

Выберите остальные строки и:

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

ОБНОВЛЕНИЕ: Это не работает должным образом, если у вас есть несколько слов в столбце. В поисках более общего решения ...

3 голосов
/ 22 ноября 2010

Emacs имеет режим прямоугольного выбора, см., Например: http://emacs -fu.blogspot.com / 2008/12 / working-with-rect-selections.html

Evenлучше, если вы включите режим cua, ввод Ctrl-Enter переведет вас в режим выбора прямоугольника, который очень прост в использовании.

http://trey -jackson.blogspot.com / 2008/10 / emacs-tip-26-cua-mode-specific.html

3 голосов
/ 22 ноября 2010

Аналогично ответу @darioo, введите в верхнюю часть буфера следующее:

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

Затем поместите курсор в конец этой строки и нажмите ctrl-x, ctrl-e.

У вас будет интерактивный поиск и замена, для которого вы нажимаете пробел, чтобы внести изменения, и нажмите ctrl-g, чтобы выйти. Если вы нажмете ! (восклицательный знак), тогда поиск перестанет быть интерактивным и будет выполнен по всему соответствующему тексту.

Если вы хотите отменить изменения, нажмите M-x (обычно ESC, затем x), введите undo и нажмите ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...