Команда seq в Linux: руководство и примеры

Что такое команда seq?
Команда seq — простая утилита GNU coreutils, которая выводит в stdout последовательность чисел по заданным параметрам. По входным аргументам seq формирует линейный набор значений и печатает их в виде строки или в несколько строк. Простые применения — генерация индексов, имен файлов, наборов IP:порт, тестовых списков.
Определение в одной строке: seq выводит числовую последовательность; параметры управляют началом, шагом, форматом и разделителем.
Почему использовать seq вместо цикла?
- Производительность: seq написан на C и эффективен при генерации больших объёмов данных; он часто быстрее shell-циклов.
- Простота: короткая и декларативная запись вместо многословного for/while в bash.
- Совместимость: удобно комбинируется с xargs, paste, awk, perl, printf и другими инструментами.
Важно: seq — инструмент генерации, а не вычислительная машина; для сложных вычислений лучше использовать awk, bc или Python.
Как использовать seq в Linux
Основной синтаксис
seq [опции] числа- Опции — флаги типа -s, -f, -w, –help.
- Числа — аргументы в одной из форм: last; first last; first increment last.
Примеры генерации списка чисел
- Один аргумент (верхняя граница):
seq 5Результат:
1
2
3
4
5- Два аргумента (нижняя и верхняя границы):
seq 4 8Результат:
4
5
6
7
8- Три аргумента (начало, шаг, конец):
seq 3 2 13Результат:
3
5
7
9
11
13Seq умеет уменьшать последовательность, если шаг отрицательный:
seq 10 -2 2Результат:
10
8
6
4
2Поменять разделитель между числами
По умолчанию разделитель — перевод строки. Флаг -s задаёт собственный разделитель.
seq -s . 3 7Выведет:
3.4.5.6.7Учтите интерпретацию оболочкой: тильда (~) разворачивается в путь домашнего каталога, если не взята в кавычки. Пример неверного и верного варианта:
seq -s ~ 3 7Может дать неожиданный результат (вставка /home/…), тогда используйте кавычки:
seq -s '~' 3 7Результат:
3~4~5~6~7Настроить формат вывода
Флаг -f принимает шаблон форматирования, совместимый с printf (например, %g, %f, %03d и т.д.). По умолчанию seq сам выбирает формат по входным числам (целые или с плавающей точкой).
seq 0.1 0.1 0.5Выведет:
0.1
0.2
0.3
0.4
0.5Принудительный формат с фиксированной точностью:
seq -f %0.2f 4 7Результат:
4.00
5.00
6.00
7.00Используйте %g или %d для целых, %f для плавающей точки, добавляйте ширину и точность по требованиям.
Выравнивание ширины
Флаг -w добавляет ведущие нули так, чтобы все строки имели одинаковую ширину, соответствующую наибольшему значению.
seq -w 1 100 1000Результат (фрагмент):
0001
0101
0201
0301
...
0901Быстрая справка
seq --helpПокажет доступные опции и краткие пояснения.
Практические примеры
Ниже — набор реальных сценариев и шаблонов использования seq в связке с другими утилитами.
Сложение ряда чисел через expr
Seq может быть использован как генератор выражения для expr:
expr `(seq -s " + " 1 100)`Здесь seq формирует строку “1 + 2 + 3 + … + 100”, а expr вычисляет сумму. Такой приём удобен для быстрых арифметических агрегатов без написания скрипта.
Быстро создать множество файлов
Создать 10 файлов file1.txt … file10.txt:
touch $(seq -f "file%g.txt" 1 10)Touch создаст список файлов, сгенерированных seq.
Генерация списков IP:порт для сканирования
Пример создания списка портов для IP 1.2.3.4:
seq -f 1.2.3.4:%g 1 65535Вы получите 65535 строк с портами от 1 до 65535. Далее результат можно подавать в xargs/parallel для параллельной проверки.
Интеграция с xargs и parallel
Пример запуска команды по списку результатов seq (последовательный вариант):
seq 1 100 | xargs -n1 -I{} echo file{}Для параллельного выполнения используйте GNU parallel:
seq 1 100 | parallel -j8 do_something {}Математические операции и преобразования
Seq удобно комбинировать с awk, если нужны фильтрация или более сложные вычисления:
seq 1 10 | awk '{print $1*$1}'Выведет квадраты чисел 1..10.
Примеры снижения ошибок и нестандартных кейсов
- Тильда и символы оболочки: берите разделители в кавычки.
- Плавающая точка: сравнения с плавающей точкой могут давать неожиданные числа из-за характеристик представления чисел с плавающей точкой.
- Очень большие последовательности: seq стримит вывод, но дальнейшая обработка (например, хранение в массиве в bash) может привести к переполнению памяти.
Когда seq не подходит (контрпример)
- Нужна сложная логика генерации (зависимость каждого элемента от предыдущих сложнее арифметической прогрессии) — лучше awk, Python.
- Нужно гарантировать точную арифметику с плавающей точкой с высокой точностью — лучше bc или Python Decimal.
- Работа с табличными наборами данных и сложной фильтрацией — awk, perl или pandas подходят лучше.
Альтернативные подходы
- Brace expansion (встроено в bash): {1..10} — удобно для небольших статичных наборов, но не поддерживает дробные шаги.
- awk: более гибок для вычислений и форматирования.
- perl/python: для генерации сложных наборов с логикой.
- seq (GNU) vs printf-подход: printf “%03d\n” {1..100} — полезен, если нужен формат без внешних инструментов.
Сравнение по простоте и гибкости:
- Простота: brace expansion > seq > awk
- Гибкость: awk/python > seq > brace expansion
- Производительность при генерации большого списка: seq часто быстрее, чем цикл в bash
Мини-методология выбора
- Нужно ли простое линейное перечисление? — seq.
- Нужны дробные шаги или шаблон вывода? — seq с -f.
- Нужна сложная логика или фильтрация? — awk или Python.
- Нужны имена файлов в shell — touch + seq или printf + brace.
Рольные чек-листы
Сисадмин:
- Использую seq для массовых операций (создание пользователей, файлов, проверка портов).
- Всегда проверяю выходной поток через head/tail перед применением команд вроде rm/xargs.
Разработчик/скриптер:
- Применяю -f для нужного шаблона и -s для объединения в одно выражение.
- Избегаю сохранения больших последовательностей в массивы bash.
Сетевая инженер:
- Генерирую списки IP:порт и подаём в nmap/xargs/parallel.
- Проверяю лимиты и не запускаю массовые сканирования без throttling.
Критерии приёмки
Если скрипт использует seq для генерации ресурсов, примем, если:
- Список генерируется корректно для крайних значений.
- Формат соответствует ожидаемому (проверка шаблона -f).
- Нет утечек памяти (результат не накапливается в RAM).
- Скрипт безопасно обрабатывает специальные символы (кавычки/тильда).
Чек-лист безопасности и риски
- Не подставляйте вывод seq напрямую в команды удаления без проверки.
- При генерации адресов/портов для сканирования соблюдайте политику организации и законы.
- Ограничивайте параллельные вызовы — перегрузка сети или целевых сервисов.
Факто-бокс
- Максимальный порт TCP/UDP: 65535 — часто используется при генерации списка портов.
- seq поддерживает целые и дробные шаги; формат задаётся через -f.
- Вывод seq можно стримить, он не требует большого объёма оперативной памяти сам по себе.
Шаблоны и сниппеты (cheat sheet)
- Простая последовательность:
seq 1 10- С шагом:
seq 0 0.5 3- С форматом и шириной:
seq -w -f %03g 1 100- Создать файлы:
touch $(seq -f "file%g.txt" 1 10)- Вставить оператор между числами (для вычислений):
expr `(seq -s " + " 1 100)`- Генерация IP:порт:
seq -f 192.168.5.%g 1 254Галерея пограничных случаев
- Нулевой шаг: seq 1 0 10 — вызовет ошибку.
- Дробный шаг при больших длинах может привести к накоплению ошибок округления.
- Отрицательные границы и шаги работают, если логика арифметики соблюдена.
Короткий глоссарий
- Формат: шаблон printf-подобной строки, задающий формат вывода (например, %g, %f).
- Разделитель: строка, которую seq вставляет между элементами с -s.
- Шаг: приращение между последовательными значениями.
Заключение
Seq — компактный и быстрый инструмент для генерации числовых последовательностей в терминале. Он особенно полезен в связке с другими утилитами Linux: touch, xargs, parallel, awk и т.д. Для простых линейных наборов и массовых операций seq часто предпочтительнее shell-циклов. В тех сценариях, где требуется сложная логика или точная арифметика с плавающей точкой, рассмотрите awk или Python.
Краткий совет: используйте -s для безопасных разделителей в кавычках, -f для форматирования и -w для выравнивания ширины. Перед применением массовых изменений всегда тестируйте вывод через head.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone