Транспонировать эти два столбца в строки?

#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. Я сделал все в лучшем порядке в обновленном ответе