Принимая хотя бы SQL 2005 для CTE :
;with cteAllColumns as (
select col1 as col
from YourTable
union
select col2 as col
from YourTable
)
select c1.col, c2.col
from cteAllColumns c1
cross join cteAllColumns c2
where c1.col < c2.col
order by c1.col, c2.col
Запишите первую строку:
%macro(200701);x gzip /home/test/200701.txt;run;
Затем, оставаясь на этой строке, перейдите в командный режим и запишите макрос a , который копирует строку ( yyp
), увеличивает первое число (ctrl-a, записывается ^ A
), перемещает один символ вправо ( l
), а затем увеличивает другое число:
qayyp^Al^Aq
(Обратите внимание, что запуск и остановка записи макроса происходит с q
.) Теперь воспроизведите макрос a 110 раз:
110@a
Это также можно сделать с помощью функций vim 7:
:let t=map(range(200801,200815), '"macro(".v:val.");x gzip /home/test/".v:val.".txt;run;"')
:put=t
Если у вас есть основные утилиты Unix / Linux, в вашем распоряжении способ, который легче запомнить, по крайней мере, если вы привыкли использовать команды блока:
(1) Сгенерировать последовательность с помощью seq (1)
:r!seq 200801 200812
seq также позволяет формировать следующее:
:r!seq -f "\%03.0f" 10 121
Знак процента должен быть экранирован.
(2) Удвойте этот блок с блоком Vim команды: Отметьте Cv, выдерните, поместите
(3) Вставьте (или добавьте) текст между этими блоками: Отметьте CV, вставьте I
Подробнее см .: help blockwise-visual.
См. Также Vimtip № 150 .
Здесь объясняется, как пометить блок текста и автоматически увеличить числа в отмеченном блоке.