#vim
Вопрос:
Я скопировал вставленные некоторые данные с веб-страницы:
x y
0 9
2 22.6
4 44.2
5 62.1
7 96.9
8 113.4
10 133.4
11 137.6
15 148.4
17 149.3
Я хотел бы перенести и слегка преобразовать данные, такие как:
x = 0,2,4,...
y = 9, 22.6, 44.2...
Я знаю, как ставить запятые после каждого столбца в режиме v, но я не знаю, как это может работать, когда у меня двузначные цифры или столбец со смешанной длиной символов.
Меня больше волнует, как транспонировать, если это та команда, которую я хочу?
Как я могу ввести свои данные в нужную форму:
x = 0,2,4,...
y = 9, 22.6, 44.2...
Ответ №1:
Если у вас установлен внешний инструмент rs
, см. Второй подход ниже, в противном случае:
Чистый Vim
Мой подход был бы сосредоточен на использовании режима визуального блока с Ctrl
v
и применении J
команды, а также очистке с заменой. Сначала выберите второй столбец в визуальном блоке и удалите его, затем вставьте его под столбцом x:
x
0
2
4
5
7
8
10
11
15
17
y
9
22.6
44.2
62.1
96.9
113.4
133.4
137.6
148.4
149.3
Затем вы можете vipJ
в каждом блоке выбрать эти данные и поместить их в одну
строку (к вашему сведению: vipJ
переходит в v
режим isual , выбирает i
nside p
aragraph,
а затем J
выводит эти строки).:
x 0 2 4 5 7 8 10 11 15 17
y 9 22.6 44.2 62.1 96.9 113.4 133.4 137.6 148.4 149.3
Быстрая замена :s/s /, /g
может заменить пробелы запятыми:
, x, 0, 2, 4, 5, 7, 8, 10, 11, 15, 17,
, y, 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
Затем вы можете просто убрать лишние запятые, добавить =
знак, удалить
пустую строку и т. Д:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
Если столбцов много, вы, вероятно, не захотите повторять
описанную выше процедуру для каждого из них… в этом случае вы, вероятно, можете записать вышесказанное в виде
макроса повторяемым способом или проверить подход ниже.
Использование внешнего инструмента rs
rs
Инструмент позволяет изменять форму массива данных, чтобы вы могли фильтровать файл (по визуальному выделению или по диапазону) с помощью инструмента изнутри vim, например:
:%!rs -T -C,
Флаги -T
означают транспонирование и -C
указывают разделитель столбцов в
выводе (в нашем случае запятая) для создания:
x,0,2,4,5,7,8,10,11,15,17,
y,9,22.6,44.2,62.1,96.9,113.4,133.4,137.6,148.4,149.3,
Затем, как и в случае с чистым подходом vim, вам просто нужно провести некоторую очистку:
:%s/,/, /g
производит:
x, 0, 2, 4, 5, 7, 8, 10, 11, 15, 17,
y, 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3,
Затем вы можете просто убрать лишние запятые и добавить =
знак:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
Бонус
При необходимости вы можете запустить внешнюю команду (также для визуального выделения или передачи диапазона) :%!column -t
, чтобы выровнять все правильно:
x = 0, 2, 4, 5, 7, 8, 10, 11, 15, 17
y = 9, 22.6, 44.2, 62.1, 96.9, 113.4, 133.4, 137.6, 148.4, 149.3
Комментарии:
1. Привет, спасибо, я дошел до того
vipJ
(никогда не использовал это раньше, что там происходит?), А затем, когда вы сказали «Мимо(e) другой колонки внизу:» Я не знаю, как это сделать? Нужно, чтобы кто-нибудь держал меня за руку2. Я сделал все в лучшем порядке в обновленном ответе