Выровнять столбцы в VI - PullRequest
4 голосов
/ 24 апреля 2009

У меня есть несколько строк, которые я хотел бы разделить на два столбца и получить данные из каждого столбца. Данные выглядят примерно так:

current_well.well_number
current_well.well_name
current_well.well_type_code
well_location.section
well_location.range

По сути, я хотел бы разделить строку на основе периода, превратить данные в два столбца и затем получить данные для каждого столбца. Я знаю, что это можно сделать в Excel, но я действительно заинтересован в решении VI для этой проблемы. Я знаю, что

%s/\./

отформатирует строку с пустыми пробелами. Но как только у меня есть данные, похожие на:

current_well    well_number
current_well    well_name
current_well    well_type_code
well_location   section
well_location   range

Как получить все значения для каждого столбца, чтобы вставить его в другое приложение?

Ответы [ 11 ]

5 голосов
/ 25 апреля 2009

Один из вариантов - использовать этот Плагин Align для выравнивания периодов, чтобы вам было легче выбирать столбец в режиме визуального блока. например если вы сделаете это:

:%Align \.

Вы получите:

current_well  . well_number
current_well  . well_name
current_well  . well_type_code
well_location . section
well_location . range

Если вы не хотите использовать плагин, попробуйте заполнить столбцы пробелами. например для вашего текста:

:%s/\v(.*)\.(.*)/\=printf("%-16s %s", submatch(1), submatch(2))/

Это оставит вас с:

current_well     well_number
current_well     well_name
current_well     well_type_code
well_location    section
well_location    range

Затем вы можете Ctrl-V и выбрать столбец текста для копирования. Просто убедитесь, что вы выбрали ширину столбца шире, чем ваше самое большое значение.

5 голосов
/ 10 июня 2013

Команда linux column хорошо подходит для создания столбцов

:%!column -s . -t

Затем используйте блочную копию.

2 голосов
/ 25 апреля 2009

Я сталкивался с этой проблемой несколько раз. Изменение точек на вкладки выстроит их в линию в основном хорошо, но не совсем. Это правда, что все столбцы будут начинаться с табуляции, но нет никакой гарантии, что они будут на одной табуляции. Например, если это был ваш оригинальный текст:

lt1tab.value1
gt1tabstop.value2

и вы делаете:

%s/\./\t/g

и при условии, что табуляция состоит из 8 пробелов, вы получите:

lt1tab  value1
gt1tabstop    value2

Вместо этого вы можете удалить все, кроме последнего столбца (или любого другого столбца). Например:

%s/^.*\.//

оставит вас с:

value1
value2

Который вы можете легко скопировать и вставить.


Если вам не нужно использовать Vim, вы можете использовать Unix cut, чтобы делать то, что вы хотите:

cut -f2 -d. input_file > output_file
1 голос
/ 25 апреля 2009

Очевидно, что описанные выше методы с выбором блока и / или Excel проще. Но я мазохист, и я решил, что у вас нет доступа ни к одному из них, и постараюсь сделать это только с помощью команд vi. Вот ужасная вещь, которую я придумал:

Мой основной план - превратить список соединенных столбцов в два списка, один за другим. Это в основном включает разбиение каждой строки на две строки, а затем копирование каждой второй строки в конец файла.

Итак, сначала мы должны разбить каждую строку на две строки с помощью этой команды:

:%s/\./^M/

Далее, качайте внизу файла и создайте пустую строку, затем вернитесь к первой строке. Это поможет с удобочитаемостью позже.

Go[Esc]
:1

Теперь вам нужно сопоставить следующую последовательность с вашим любимым ключом:

:map [Key] mkjddGp'kj

(Для записи это помечает текущую строку, удаляет строку под ней, вставляет эту строку внизу файла, возвращает к строке, с которой вы начали, а затем перемещается к следующей строке.)

Наконец, нажмите назначенную клавишу один раз для каждой строки в вашем списке. Итак, со списком примеров, вы бы нажали его 5 раз. Убедитесь, что вы начинаете с первой строки в списке !!

В конце вы получите следующее:

current_well
current_well
current_well
well_location
well_location

well_number
well_name
well_type_code
section
range

Теперь вы можете легко скопировать каждый список туда, куда вам нужно его поместить.

0 голосов
/ 05 февраля 2013

Вверху файла:

!}awk -F. '{print $1}' >> %

Вам сообщат, что файл изменился. Выберите опцию L (загрузить).
Добавьте пустую строку под исходными строками, вернитесь к началу.

for(i=1;i<=NR;i++);print $2 >> %

Снова выберите L

Удалить исходные строки.
Теперь у вас есть первая и вторая части в двух группах.

0 голосов
/ 12 декабря 2010

Я делаю это все время, просто добавляя много места:

%s/./                     /

Затем <c-v>, чтобы войти в режим блокировки в пустом пространстве, нарисуйте нужную позицию столбца, <, чтобы сместить текст вправо в направлении моего столбца, затем нажмите и удерживайте .. Занимает секунды.

Еще один способ сделать это, если вы знаете конкретную позицию столбца, по которой хотите выстроиться: перейдите к первой строке и начните запись (qq), найдите разделитель (f.), вставьте связку пробел (20i <esc>), удалите пробел обратно в определенный столбец (d15|), затем переместитесь вниз на строку (j). Затем вы просто удерживаете нажатой клавишу Shift и проводите пальцами по @Q несколько раз (или используете счетчик 10@q), пока все столбцы не выстроятся в линию. :)

0 голосов
/ 25 апреля 2009

Я бы конвертировал точки во вкладки, затем блокировал выбор каждого столбца:

:% s /\./ CtrlV-Tab / г

CtrlV , чтобы затем заблокировать выбор столбцов.

Или, поскольку у вас есть значения, разделенные табуляцией, они вставляются непосредственно в столбцы в Excel.

0 голосов
/ 25 апреля 2009

Ctrl V выделяет столбец

0 голосов
/ 25 апреля 2009

Вы можете выбрать столбцы в gvim, набрав либо Ctrl-V Ctrl-G или Ctrl-Q Ctrl-G ( в зависимости от того, используете ли вы окна, вставьте сопоставления клавиш), а затем выберите мышью.

0 голосов
/ 25 апреля 2009

Почему бы не заблокировать визуальный режим? C-v, выберите то, что вы хотите, и вставьте его в другое приложение. Для такого типа вставки вам, вероятно, следует установить

:set guioptions+=a

также.

Хм, теперь, когда я перечитал ваш вопрос. Вы спрашиваете, как разделить данные на столбцы или как вставить их в другое приложение?


Я думаю, что понял (3-е чтение).

Делай, как сделал, и получи места, где раньше были точки. Затем сделайте другую замену и замените пробелы вкладками, каждая из которых должна быть 15, или что-то еще. Это выстроит их красиво. Затем вы можете выбрать и скопировать их куда угодно.

Вы также можете сопоставить регулярное выражение, чтобы выбрать второй столбец, например, но, хотя он светится как рождественская елка, вы не сможете его выдернуть.

...