Как использовать 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 дает вам больший контроль над операционной системой и ее функциями, что также является причиной, по которой вам следует начать использовать терминал поверх графического интерфейса уже сегодня.