← Весь справочник

seq

Последовательность чисел — с шагом, обратным счётом, дробями, нулями впереди и своим форматом

seq печатает ряд чисел от начала до конца с заданным шагом, по одному в строке. Им задают циклы (for i in $(seq 10)), генерируют тестовые данные, имена файлов с номерами и диапазоны для xargs.

Синтаксис

seq [опции] КОНЕЦ               # от 1 до КОНЕЦ
seq [опции] НАЧАЛО КОНЕЦ        # шаг 1
seq [опции] НАЧАЛО ШАГ КОНЕЦ    # свой шаг; отрицательный — обратный отсчёт

Шаг — средний аргумент. Все три числа могут быть дробными и отрицательными. Ряд заканчивается, когда следующее число вышло бы за КОНЕЦ; сам КОНЕЦ печатается, только если в него точно попали.

Опции

ОпцияЧто делает
-wвыровнять ширину ведущими нулями: 08 09 10
-s СТРОКАразделитель между числами вместо \n (в конце всё равно ставится \n)
-f ФОРМАТформат числа в стиле printf для дробных: %g, %f, %e с шириной и точностью; вокруг можно добавить текст

Форматы для -f

ФорматПримерРезультат
%gseq -f %g 1 31 2 3 (по умолчанию для чисел вида 1e3)
%.2fseq -f %.2f 0 0.5 10.00 0.50 1.00
%03.0fseq -f %03.0f 8 10008 009 010
%5.1fseq -f %5.1f 1 2 1.0 2.0
текст%gтекстseq -f 'file%g.txt' 2file1.txt file2.txt
%%seq -f '%%%g' 1 1%1 — знак процента в выводе

Целочисленные %d, %x не поддерживаются: seq работает с числами с плавающей точкой. Без -f формат подбирается сам: по числу знаков после точки во входных числах (seq 0 0.25 1 → 0.00 0.25 …).

Примеры

# 1..5
seq 5

# от 2 до 10 с шагом 2
seq 2 2 10

# обратный отсчёт — шаг обязательно отрицательный
seq 5 -1 1

# в одну строку через запятую или пробел
seq -s, 5
seq -s ' ' 3

# с ведущими нулями
seq -w 1 10

# дроби
seq 0 0.25 1
seq -f '%.1f' 1 0.5 3

# имена файлов: file001.txt … file005.txt
seq -f 'file%03g.txt' 5

# цикл
for i in $(seq 3); do echo "attempt $i"; done

# создать 100 файлов одним вызовом touch
seq -f 'part%03g.log' 100 | xargs touch

# сумма 1..100 (bc в песочнице нет)
echo $(( $(seq -s+ 100) ))

# отрицательные числа
seq -3 -1

Подводные камни

  • Шаг — второй аргумент, а не третий. seq 1 10 2 — это «от 1 до 2 с шагом 10», выведет только 1. Правильно: seq 1 2 10.
  • seq 5 1 молча ничего не печатает и возвращает 0: шаг по умолчанию +1 даже когда конец меньше начала. Для обратного счёта пиши seq 5 -1 1.
  • Шаг 0 — ошибка (invalid Zero increment value).
  • -f %g на больших числах даёт экспоненту: seq -f 'id-%g' 1000000 1000000 → id-1e+06. Для целых в формате бери %.0f или %06.0f.
  • -w и -f вместе нельзя (format string may not be specified when printing equal width strings). Для нулей с текстом используй -f '%03g'.
  • Конец печатается, только если точно попали. seq 0 0.1 0.95 кончится на 0.9, а seq 1 3 8 — на 7.
  • Для простых целых диапазонов в bash есть {1..10} и {01..10} (с нулями) — без отдельного процесса. Но в фигурных скобках нельзя использовать переменные: {1..$n} не раскроется, тогда и нужен seq 1 "$n".

См. также

shuf · xargs · paste · циклы · арифметика · echo и printf