Поиск по сайту:

Как использовать команду seq в Linux


Команда Linux seq генерирует списки чисел в мгновение ока. Но как этот функционал можно применить на практике? Мы покажем вам, как seq может вам пригодиться.

Команда seq

На первый взгляд команда Linux seq кажется чем-то странным. Он позволяет быстро генерировать последовательности чисел, и все! Однако ключевое слово здесь — «быстро». Через мгновение вы увидите, насколько быстро может работать эта маленькая команда.

Однако, независимо от того, как они генерируются, насколько полезен список чисел? Команда seq была добавлена в 8-ю редакцию Unix в 1985 году. С тех пор она существует, так что она должна делать что-то стоящее.

Философия Unix заключается в том, что она полна небольших утилит, которые делают одну вещь и делают ее хорошо. Одним из центральных принципов этой философии является написание программ, принимающих данные от других программ. Конечно, это также означает, что эти программы должны генерировать выходные данные, которые могут использоваться в качестве входных данных другими программами.

Команда seq вступает в свои права, когда используется с другими командами, использующими ее вывод, либо через конвейеры, либо через расширение командной строки.

Генерация базового списка

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

seq 6

Если вы введете два числа в командной строке, первое будет начальным, а второе — конечным, как показано ниже:

seq 4 10

Вы можете установить размер шага, включив третье число. Он находится между начальным и конечным номерами. Мы вводим следующее, чтобы попросить seq создать список чисел, который начинается с шести, заканчивается на 48 и использует шаг шесть:

seq 6 6 48

Счет в обратном порядке

Мы также можем попросить seq создать список чисел от большего к меньшему. Однако для этого мы должны предоставить отрицательный шаг.

Следующая команда создает список, который насчитывает от 24 до 12 с шагом 6, потому что мы вводим шаг как отрицательное число:

seq 24 -6 12

Счет с десятичными дробями

Номера начала, конца и шага также могут быть десятичными. Если какое-либо из чисел является десятичным, остальные также рассматриваются как десятичные. Следующая команда генерирует список чисел с шагом 0,2:

seq 1 0.2 2

Скорость след.

seq молниеносно быстр — единственным узким местом является время, необходимое вам для ввода команды в окне терминала. Чтобы проверить его скорость, давайте запросим список из 250 000 номеров.

Мы вводим следующее, используя команду time, чтобы увидеть, сколько времени занимает процесс:

time seq 250000

Результаты отображаются под списком. Даже на нашем тестовом ПК средней мощности seq работает на удивление быстро.

Весь список был создан и записан на экран примерно за 1/3 секунды. Если мы перенаправим список в файл, мы даже сможем избежать накладных расходов на ввод в окне терминала.

Для этого набираем следующее:

time seq 250000 > numbers.txt

Время, необходимое для заполнения списка и создания файла, теперь составляет около 1/7 секунды.

Использование разделителя

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

Например, вам нужно создать список с разделителями-запятыми, список, разделенный двоеточиями, или любой другой знак препинания или символ. Разделитель на самом деле является строкой, поэтому вы можете использовать более одного символа.

Мы будем использовать параметр -s (разделитель). Следующая команда создаст список, разделенный запятыми:

seq s, 6 6 36

Эта команда будет использовать двоеточие (:) в качестве разделителя:

seq -s: 6 6 36

Эта команда указывает seq использовать два дефиса (-) в качестве разделителя:

seq -s-- 6 6 36

Использование строк формата

Команда seq также поддерживает строки формата в стиле языка C. Это позволяет вам форматировать вывод с гораздо большим контролем, чем просто указание разделителя. Чтобы использовать строку формата, используйте параметр -f (формат).

Следующая команда указывает seq использовать нули для дополнения вывода до двух символов:

seq -f "%02g" 6

Мы можем отформатировать строку с любым текстом, который нам нравится, и поместить число в любом месте строки следующим образом:

seq -f "Number %02g in a C-like format string" 6

Быстрый способ установить нулевой отступ

Самый быстрый способ установить нулевой отступ — использовать параметр -w (равная ширина). Это говорит seq использовать нули для дополнения чисел, чтобы они были одинаковой ширины с наибольшим числом.

Следующая команда считает от 0 до 1000 с шагом 100, и все числа будут дополнены нулями:

seq -w 0 100 1000

Самое длинное число занимает четыре символа, поэтому все более узкие числа дополняются нулями до этой ширины (даже 0 дополняется до четырех нулей).

Трубопровод seq в bc

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

Следующая команда создает список чисел, разделенных звездочками (*), начиная с единицы и заканчивая шестью:

seq -s* 6

Если мы передаем этот список в bc, он оценивает список, используя звездочки (*) в качестве символов умножения:

seq -s* 6 | bc

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

seq -s+ 5

Мы вводим следующее, чтобы передать это в bc и оценить список:

seq -s+ 5 | bc

Создание файлов с последовательностью

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

Мы создадим набор из 10 файлов с одинаковым базовым именем и другим номером (файл-1.txt, файл-2.txt и т. д.). Набираем следующее:

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

Затем мы вводим следующее, чтобы проверить файлы:

ls file*

Использование seq в циклах Bash

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

Введите следующий текст в редактор, а затем сохраните его как «loops.sh»:

#!/bin/bash

  for val in $(seq 5 0.2 6.6); do

  echo "The value is now: $val"

done

Затем мы вводим следующее, чтобы сделать наш новый скрипт исполняемым:

chmod +x loop.sh

Когда мы запускаем скрипт, счетчик циклов печатается в окне терминала. Затем мы можем ввести следующее, чтобы увидеть, как счетчик десятичного цикла увеличивается с каждой итерацией цикла:

./loop.sh

Помните, что seq тоже может считать в обратном порядке; вы можете использовать это в циклах таким же образом.

Красиво и просто

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

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

RELATED: Best Linux Laptops for Developers and Enthusiasts