Выровняйте столбцы в VI

Вы можете объединить все необходимые UUID в одном выражении:

select w1.uid, array_agg(w2.uid order by wl.idx) as uuidlist
from words w1
  cross join lateral unnest(w1.wordlist) with ordinality as wl(word,idx) 
  join words w2 on w2.word = wl.word
where w1.wordlist is not null
  and w1.uuidlist is null -- optional
group by w1.uid;

Опция with ordinality возвращает дополнительный столбец, который указывает положение элемента в исходном массиве. Это необходимо для агрегирования UUID в правильном порядке.

Это возвращает следующий результат с вашими примерами данных:

uid  | uuidlist  
-----+------------
cccc | {aaaa,bbbb}

Это может использоваться в качестве источника оператора обновления (при условии, что столбец uid уникален):

update words
  set uuidlist = t.uuidlist
from (
  select w1.uid, array_agg(w2.uid order by wl.idx) as uuidlist
  from words w1
    cross join lateral unnest(w1.wordlist) with ordinality as wl(word,idx)
    join words w2 on w2.word = wl.word
  where w1.wordlist is not null
    and w1.uuidlist is null -- optional
  group by w1.uid
) t
where t.uid = words.uid;

Пример в сети: https://rextester.com/LZUYC57184

(обратите внимание, что отображение массивов в этом примере немного странно) sup> [ 1111]

5
задан Sagar Jain 19 September 2015 в 08:18
поделиться

8 ответов

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

lt1tab.value1
gt1tabstop.value2

, а вы делаете:

%s/\./\t/g

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

lt1tab  value1
gt1tabstop    value2

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

%s/^.*\.//

оставит вам:

value1
value2

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


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

cut -f2 -d. input_file > output_file
3
ответ дан 18 December 2019 в 07:56
поделиться

Ctrl V выбирает столбец

0
ответ дан 18 December 2019 в 07:56
поделиться

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

:set guioptions+=a

.

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


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

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

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

0
ответ дан 18 December 2019 в 07:56
поделиться

Очевидно, что описанные выше методы с выбором блока и / или 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

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

1
ответ дан 18 December 2019 в 07:56
поделиться

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

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

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

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

0
ответ дан 18 December 2019 в 07:56
поделиться

Один из вариантов - использовать этот плагин 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 и выбрать столбец текста для копирования. Просто убедитесь, что вы выбрали ширину столбца шире, чем ваше самое широкое значение.

6
ответ дан 18 December 2019 в 07:56
поделиться

Время использования методов расширения:

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

Для примера второго пункта; у вас может быть метод расширения для IList (например, Sort ), который может быть полностью записан с использованием существующих IList членов .. так зачем кому-то еще что-то писать? Это основной блок LINQ, и он позволил Microsoft предоставить гораздо больше большей функциональности, ничего не нарушая. Вы не можете гарантировать, что ваш код будет версией, которая выполняется с помощью метода расширения,

0
ответ дан 18 December 2019 в 07:56
поделиться

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

0
ответ дан 18 December 2019 в 07:56
поделиться