Как использовать seq для создания последовательности чисел в Linux

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

Но что вы можете сделать с утилитой командной строки, которая выдает вам кучу цифр? Вы узнаете из этого руководства.

Что такое команда seq?

Как упоминалось выше, команда seq в Linux быстро генерирует последовательность числовых символов. Пользователи могут передавать аргументы команде для генерации различных комбинаций чисел. Например, вы можете получить увеличиваемый список, просто передав дополнительный аргумент в seq.

Но каково практическое использование этой команды? Хотя seq в целом может показаться не очень мощным инструментом, вы можете воспользоваться этой командой, реализовав ее с другими утилитами Linux. Вы также можете использовать seq в сценариях bash, чтобы раскрыть его истинную силу.

Как использовать seq в Linux

Seq принимает всего несколько аргументов, что делает его простым в освоении инструментом для всех.

Базовый синтаксис

Основной синтаксис команды:

 seq options numbers

… где параметры – это флаги, которые вы можете указать для вызова различных методов команды, а числа – это аргументы, которые вы передаете для генерации числовой последовательности.

Создать список чисел

Аргументы Seq соответствуют формату ввода, указанному ниже:

 seq last
seq first last
seq first increment last

Когда вы указываете только одно число, seq интерпретирует его как верхний предел для списка и генерирует последовательность, начиная с единицы до указанного числа.

 seq 5

Вышеупомянутая команда выведет следующее:

 1
2
3
4
5

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

 seq 4 8

Выход:

 4
5
6
7
8

Но когда вы передаете команде три числа, она интерпретирует второй аргумент как число приращения. Например:

 seq 3 2 13

Вышеупомянутая команда выведет список чисел от трех до 13 с шагом два.

 3
5
7
9
11
13

Добавить разделитель между числами

По умолчанию seq использует символ новой строки в качестве разделителя для списка. По этой причине каждое число в списке находится на отдельной строке.

Вы можете изменить это поведение по умолчанию и использовать собственный разделитель с помощью флага -s . Для того, чтобы использовать период символа в качестве разделителя (.):

 seq -s . 3 7

Выход:

 3.4.5.6.7

Имейте в виду, что некоторые символы, такие как тильда ( ~ ), должны быть заключены в кавычки. Это связано с тем, что терминал использует символ тильды для обозначения каталога / home , и это отразится на выводе, если вы не добавите кавычки.

 seq -s ~ 3 7

Выход:

 3/home/4/home/5/home/6/home/7

С другой стороны, когда вы заключаете разделитель в кавычки:

 seq -s '~' 3 7

Выход:

 3~4~5~6~7

Настройте формат вывода

Вы также можете изменить формат выходной последовательности, используя флаг -f . По умолчанию seq извлекает стиль формата из пользовательского ввода. Например, если вы укажете числа 0,1 и 0,5, выходные данные по умолчанию будут иметь формат чисел с плавающей запятой.

 seq 0.1 0.5

Выход:

 0.1
0.2
0.3
0.4
0.5

Вы можете указать собственный выходной формат, используя различные спецификации преобразования, такие как% a,% e,% f,% g,% A,% E,% F и% G.

Вы можете использовать спецификатор % f, если хотите, чтобы выходные данные соответствовали формату чисел с плавающей запятой.

 seq-f %f 4 7

Выход:

 4.000000
5.000000
6.000000
7.000000

Чтобы изменить точность до двух десятичных знаков:

 seq -f %0.2f 4 7

Выход:

 4.00
5.00
6.00
7.00

Вы также можете полностью преобразовать вывод, указав шаблон вывода. Например, чтобы получить список всех IP-адресов, начинающихся с 192.168.5.x :

 seq -f 192.168.5.%g 1 233

Выход:

Чтобы добавить отступ к выходным данным, вы можете использовать флаг -w . Флаг -w поддерживает ширину вывода в соответствии с наибольшим указанным числом.

Чтобы сгенерировать последовательность чисел от одного до 1000 с шагом 100 при сохранении постоянной ширины:

 seq -w 1 100 1000

Выход:

 0001
0101
0201
0301
0401
0501
0601
0701
0801
0901

Получить справку по командной строке seq

Хотя seq прост в использовании, иногда пользователи могут захотеть проверить страницу руководства для команды . Флаг –help отображает страницу руководства seq:

 seq --help

Выход:

Практические примеры

Как уже упоминалось, seq в основном используется с другими командами Linux, например touch и expr.

Выполните математические операции

Если вы хотите быстро добавить или вычесть определенный диапазон чисел, вы можете легко сделать это, используя seq внутри expr , которое представляет собой команду Linux, которая обрабатывает ввод как выражение и отображает соответствующий вывод.

Чтобы сложить все числа от одного до 100:

 expr `(seq -s " + " 1 100)`

Команда seq генерирует следующий вывод:

 1 + 2 + 3 + 4 + 5 + 6...

Expr рассматривает его как входное выражение и выводит решение.

 5050

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

Быстро создавать несколько файлов

Если вы хотите создать несколько файлов в Linux, имена которых следуют аналогичному шаблону, вы можете легко сделать это с помощью команды touch и seq.

Например, чтобы создать 10 файлов с именем file-x.txt , где x – это число от 1 до 10:

 touch $(seq -f "file%g.txt" 1 10)

Touch создаст для вас файлы в мгновение ока.

Реализация seq в скриптах

Представьте, что вы пишете инструмент сетевого сканера, такой как Nmap в bash, вы можете захотеть получить список всех открытых портов в сети. Но для этого вам нужно пропинговать каждый порт (всего 65535) и проанализировать ответ.

Чтобы сэкономить время, вы можете использовать seq и сгенерировать список IP-адресов и комбинаций портов, которые вы можете использовать в своем скрипте.

Предположим, вы хотите получить список всех портов устройства с IP-адресом 1.2.3.4 . Вот быстрая команда для создания желаемого результата:

 seq -f 1.2.3.4:%g 1 65535

Выход:

Затем вы можете использовать этот вывод как список и просматривать его, проверяя каждый порт с помощью вашего скрипта и анализируя, открыт он или нет.

Насколько быстро seq генерирует числа?

Вы можете подумать, если вы можете добиться аналогичных результатов с помощью цикла for в bash, зачем выбирать seq для задачи? Это потому, что настоящая сила seq заключается в его скорости. Seq быстрее, чем любая другая команда, генерирующая последовательность чисел в Linux.

Вы даже можете проверить его скорость с помощью утилиты time в Linux. Давайте посмотрим, сколько времени требуется, чтобы seq сгенерировал список из миллиона чисел, начиная с единицы.

 time seq 1000000

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

Возможности командной строки Linux

Seq – не единственный инструмент в Linux, который в значительной степени ориентирован на получение быстрых и точных результатов. Хотя вы можете сгенерировать список чисел с помощью цикла for в bash , это не рекомендуется, учитывая, насколько на самом деле невероятно быстрый seq.

Командная строка Linux дает вам больший контроль над операционной системой и ее функциями, что также является причиной, по которой вам следует начать использовать терминал поверх графического интерфейса уже сегодня.